如何在LIKE和部分匹配的MySQL中使用VARCHAR字段的索引?

时间:2014-03-26 14:40:05

标签: mysql sql database indexing database-indexes

我有一个MySQL表,里面有4200万条记录。 此表中的“name”字段具有索引(非UNIQUE而非PK)

如果我使用

SELECT x FROM table WHERE name='asdef' 

它使用索引,我很快就得到了结果。

如果我使用

SELECT x FROM table WHERE name LIKE '%sd%'

即使我使用FORCE INDEXUSE INDEX,它也不会使用索引。

我绝对需要进行部分匹配。如何在保持我的字段为VARCHAR的同时执行此操作?

1 个答案:

答案 0 :(得分:1)

嗯,你有问题。并且,SQL可能提供一些工具,但它们可能无法解决您的问题。

首先,你的“部分”搜索真的是一个词组中的单词。如果是这样,您可以使用MySQL全文搜索来查找单词。您可能需要注意停用词列表和最小搜索长度,以使其适用于您的数据。

其次,整个表格中是否重复了这些名字?如果是这样,那么标准化将有所帮助。例如,如果4200万条记录中有5万个名称,那么搜索5万条记录就更可行了。

第三,您正在寻找一些有限的术语吗?如果是这样,那么您可以在表中添加通过触发器维护的标志。

第四,行有多宽,与name无关?如果行宽,您可以通过将name存储在适合并保留在内存中的单独表中来使穷举搜索更有效。