我有一个 MySQL 表,我对其进行了非常频繁的 SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%' 查询。任何类型的索引都有助于加快速度吗?

表中有几百万条记录。如果有任何可以加速搜索的东西,它会严重影响数据库文件的磁盘使用以及 INSERTDELETE 语句的速度吗? (没有执行过 UPDATE)

更新:发帖后很快看到了很多关于LIKE在查询中的使用方式的资料和讨论;我想指出,该解决方案必须使用 LIKE '%text%'(即,我要查找的文本被预先添加并附加了 % 通配符)。出于多种原因,包括安全性,数据库也必须是本地的。

最佳答案

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

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

更新

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

关于mysql - 如何加速 SELECT .. LIKE 在 MySQL 中对多列的查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2042269/

10-16 18:49