我有一个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%'(也就是说,我要查找的文本在前面加上%通配符)。由于多种原因,包括安全性,数据库也必须是本地的。
3 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
索引无法帮助文本与前导通配符匹配,索引可用于:
LIKE 'text%'
但是我猜这不会削减。对于这种类型的查询,如果要扩展可搜索的记录数量,则确实应该寻找全文搜索提供商。我首选的提供商是Sphinx,功能非常全/快速等。Lucene可能也值得一看。MyISAM表上的全文索引也可以使用,但是最终对于具有大量写操作的任何数据库追求MyISAM并不是一个好主意。
RISEBY
TA贡献1856条经验 获得超5个赞
我要补充一点,在某些情况下,如果您正在查看的字段通常为空或包含常量,则可以使用索引以及like / rlike来加快查询速度。
在那种情况下,您似乎可以通过添加带有固定值的“ and”子句来限制使用索引访问的行。
我尝试过在一个通常不包含很多标签的巨大表格中搜索“标签”。
SELECT * FROM objects WHERE tags RLIKE("((^|,)tag(,|$))" AND tags!=''
如果您在标签上有一个索引,则会看到它用于限制正在搜索的行。
添加回答
举报
0/150
提交
取消