我有一个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%'(也就是说,我要查找的文本在前面加上%通配符)。由于多种原因,包括安全性,数据库也必须是本地的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
索引不会加快查询的速度,因为对于文本列,索引通过索引从左开始的N个字符来工作。当您喜欢'%text%'时,它不能使用索引,因为在文本之前可以有可变数量的字符。
您应该做的是根本不使用这样的查询。相反,您应该使用MySQL支持MyISAM表的类似FTS(全文搜索)的工具。自己为非MyISAM表创建这样的索引系统也很容易,您只需要一个单独的索引表即可在实际表中存储单词及其相关ID。
更新资料
全文搜索可用于带有MySQL 5.6+的InnoDB表。来源:stack overflow