一尘不染

如何加快SELECT ..LIKE查询在MySQL中的多列?

mysql

我有一个MySQL表,对此SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'查询非常频繁。任何索引都可以帮助加快速度吗?

表中有几百万条记录。如果有什么方法可以加快搜索速度,是否会严重影响数据库文件对磁盘的使用以及INSERTand
DELETE语句的速度?(UPDATE从未执行过)

更新 :发布后,我很快就看到了很多有关LIKE查询中使用方法的信息和讨论;我想指出,该解决方案 必须 使用LIKE '%text%'(也就是说,我要查找的文本在前面加上%通配符)。由于多种原因,包括安全性,数据库也必须是本地的。


阅读 261

收藏
2020-05-17

共1个答案

一尘不染

索引不会加快查询的速度,因为对于文本列,索引通过索引从左开始的N个字符来工作。当您喜欢’%text%’时,它不能使用索引,因为在文本之前可以有可变数量的字符。

您应该做的是根本不使用这样的查询。相反,您应该使用MySQL支持MyISAM表的类似FTS(全文搜索)的工具。自己为非MyISAM表创建这样的索引系统也很容易,您只需要一个单独的索引表即可在实际表中存储单词及其相关ID。

更新资料

全文搜索可用于带有MySQL 5.6+的InnoDB表。

2020-05-17