为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2019-12-27 15:25:04
我有一个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并不是一个好主意。


查看完整回答
反对 回复 2019-12-27
?
RISEBY

TA贡献1856条经验 获得超5个赞

我要补充一点,在某些情况下,如果您正在查看的字段通常为空或包含常量,则可以使用索引以及like / rlike来加快查询速度。

在那种情况下,您似乎可以通过添加带有固定值的“ and”子句来限制使用索引访问的行。

我尝试过在一个通常不包含很多标签的巨大表格中搜索“标签”。

SELECT * FROM objects WHERE tags RLIKE("((^|,)tag(,|$))" AND tags!=''

如果您在标签上有一个索引,则会看到它用于限制正在搜索的行。


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 668 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信