gpt4 book ai didi

MySQL 在一列的最后 5 个字符内搜索?

转载 作者:可可西里 更新时间:2023-11-01 08:20:56 26 4
gpt4 key购买 nike

我的用户表有一个“名称”列,其中包含如下信息:

Joe Lee
Angela White

我想高效地搜索名字或姓氏。名字很简单,我会做

SELECT * FROM user WHERE name LIKE "ABC%"

但对于姓氏,如果我这样做

SELECT * FROM user WHERE name LIKE "%ABC"

那会非常慢。

所以我在考虑统计输入的字符数,例如“ABC”有3个字符,如果我能只搜索name列的最后三个字符,那就太好了。所以我想要类似的东西

SELECT * FROM user WHERE substring(name, end-3, end) LIKE "ABC%"

MySQL 中有什么可以做到这一点吗?

非常感谢!

附言。我不能做全文,因为我们的搜索引擎不支持。

最佳答案

原因

  WHERE name LIKE '%ith' 

按姓氏查找“John Smith”的速度较慢,原因与此相同

  WHERE Right(name, InStr(name, ' ' )) LIKE 'smi%'

或列上的任何其他表达式都很慢。它破坏了使用索引进行快速查找,让 MySQL 服务器进行全表扫描或全索引扫描。

如果您使用的是 Oracle(也就是说,如果您为以前富有的雇主工作),则可以使用函数索引。事实上,您必须添加一些额外的列或其他一些帮助数据来加速您的搜索。

最明智的做法是将您的名字和姓氏分成单独的列。其他一些人指出了这样做的充分理由。

如果您不能这样做,您可以尝试创建一个额外的列,其中包含反转的名称字符串,并在该列上创建一个索引。例如,该列会将“John Smith”存储为“htimS nhoJ”。然后你可以按如下方式搜索。

 WHERE nameReversed LIKE CONCAT(REVERSE('ith'),'%')

此搜索将使用索引并且速度相当快。我在这方面取得了很好的成功。

关于MySQL 在一列的最后 5 个字符内搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com