如何加快SELECT ..LIKE查询在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%'(也就是说,我要查找的文本在前面加上%通配符)。由于多种原因,包括安全性,数据库也必须是本地的。


慕田峪4524236
浏览 670回答 3
3回答

MMMHUHU

索引无法帮助文本与前导通配符匹配,索引可用于:LIKE 'text%'但是我猜这不会削减。对于这种类型的查询,如果要扩展可搜索的记录数量,则确实应该寻找全文搜索提供商。我首选的提供商是Sphinx,功能非常全/快速等。Lucene可能也值得一看。MyISAM表上的全文索引也可以使用,但是最终对于具有大量写操作的任何数据库追求MyISAM并不是一个好主意。

RISEBY

我要补充一点,在某些情况下,如果您正在查看的字段通常为空或包含常量,则可以使用索引以及like / rlike来加快查询速度。在那种情况下,您似乎可以通过添加带有固定值的“ and”子句来限制使用索引访问的行。我尝试过在一个通常不包含很多标签的巨大表格中搜索“标签”。SELECT * FROM objects WHERE tags RLIKE("((^|,)tag(,|$))" AND tags!=''如果您在标签上有一个索引,则会看到它用于限制正在搜索的行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL