我有一个MySQL表,对此SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'查询非常频繁。任何索引都可以帮助加快速度吗?
SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'
表中有几百万条记录。如果有什么方法可以加快搜索速度,是否会严重影响数据库文件对磁盘的使用以及INSERTand DELETE语句的速度?(UPDATE从未执行过)
INSERT
DELETE
UPDATE
更新 :发布后,我很快就看到了很多有关LIKE查询中使用方法的信息和讨论;我想指出,该解决方案 必须 使用LIKE '%text%'(也就是说,我要查找的文本在前面加上%通配符)。由于多种原因,包括安全性,数据库也必须是本地的。
LIKE
LIKE '%text%'
索引不会加快查询的速度,因为对于文本列,索引通过索引从左开始的N个字符来工作。当您喜欢’%text%’时,它不能使用索引,因为在文本之前可以有可变数量的字符。
您应该做的是根本不使用这样的查询。相反,您应该使用MySQL支持MyISAM表的类似FTS(全文搜索)的工具。自己为非MyISAM表创建这样的索引系统也很容易,您只需要一个单独的索引表即可在实际表中存储单词及其相关ID。
更新资料
全文搜索可用于带有MySQL 5.6+的InnoDB表。