史密斯·沃伦·约翰
是的,对于您当前的数据 struct ,您应该
拆分并进行所有可能的组合,
例如"SELECT...NAME LIKE‘%John%Smith%’或NAME LIKE‘%Smith%John%’".
@fusion3k很有帮助地指出,我们可以将其重构为更简单:
SELECT ... name LIKE '%John%' AND name LIKE '%Smith%'
一定要考虑更改磁盘上的数据 struct .
我假设该表包含"许多"行,
因此,指数化很重要.
请理解前导%
通配符
倾向于禁用索引,强制执行扫描行为
取而代之的是.
请注意
EXPLAIN个
查询计划.
通常,一对索引查询将
比单张桌子扫描所需的时间更少.
考虑对'%Smith%'
人发出一个查询
然后让您的脚本过滤行
返回,寻找其他字符串匹配.
这可能值得你花时间来写一个 playbook
遍历所有行并更新以填充
具有修改的名称拼写的新列,
例如,在空格上拆分以生成反转的
名字.或者,您甚至可以 Select 存储副本
名称的副本,包括反转的,作为单个字符串.
按字母顺序排列字符串中的单词可以简化查询.
其他规范化,比如名字缩写,
事实可能也会证明这是有帮助的.
存储"额外的"前导空格和尾随空格,
可以更容易地创作一些通配符查询.
MySQL提供
regex support个
通过REGEXP
/RLIKE
关键字.
考虑使用为以下目的量身定制的磁盘索引
full text search.