索引mysql中的文本可以改进LIKE'%search%'的搜索文本

时间:2012-06-09 06:33:04

标签: mysql performance query-optimization innodb

我在mysql 版本:5.1.61-community-log 中使用InnoDB引擎。要搜索的文本长度少于100个字符。使用 LIKE'%searchstring%'查询的效果是否会通过索引文本来改善?

编辑:
我正在使用此查询来查询jquery自动建议组件 我正在使用第三方虚拟主机服务。所以升级对我来说不是一个选择

1 个答案:

答案 0 :(得分:4)

不,添加索引无法帮助您进行LIKE '%foo%'次查询(多*)。如果您有一个常量前缀,LIKE条件只能有效地使用索引,例如LIKE 'foo%'

您应该考虑使用full text search。如果您使用的是MySQL 5.5或更早版本,则仅支持MyISAM引擎。在MySQL 5.6或更新版本中,InnoDB也支持全文搜索。

如果您使用的是旧版本的MySQL,无法升级,并且无法更改存储引擎(因为您需要InnoDB的其他功能,例如外键约束),那么您可以考虑创建一个新的MyISAM表它只存储主键和文本列。如果您还需要访问其他列,则可以使用此表执行快速全文搜索并加入原始表。

您还可以考虑使用外部文本搜索引擎,例如:

(*)如果您添加的索引是查询的覆盖索引,则可以通过添加索引获得一些小改进。由于索引的宽度较小,索引的完整扫描将比整个表的完整扫描更快。