我的Mysql LIKE语句有多快?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了我的Mysql LIKE语句有多快?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1574字,纯文字阅读大概需要3分钟。
内容图文
![我的Mysql LIKE语句有多快?](/upload/InfoBanner/zyjiaocheng/901/446694fea88346d4b22162a4f6553dbe.jpg)
以下MYSQL语句需要0.577251秒:
SELECT synonym_group FROM synonym WHERE name LIKE '%ak%'
Name是varchar(250)字段.
同义词数据库表中目前有356,187条记录.
数据:21 MB.索引:23 MB.总大小:45 MB.每行字节数:67.
那么合理的时间是0.577251秒吗?如果没有,那是什么,我应该做什么?我已经阅读过这类问题的几个主题,而我能看到的主要解决方案是使用像sphinx这样的东西.
事实是,我桌子上的几个字段可能是无关紧要的.比方说,如果我将每行的字节数减少一半,通过消除不必要的字段,会使搜索速度提高一倍吗?
提前致谢.
解决方法:
如果ak是一个单词,那么FULLTEXT索引将起作用(如果你调整最小单词长度,见下文).
因此,搜索带有FULLTEXT索引的’ak’将匹配:
>’这个啊.’
>’AK’
>’AK.随你.’
>’无论如何. AK“.
但是,它不符合这个:
>’比克’
>’AKT’
必须有单词边界才能匹配.
FULLTEXT搜索的默认值为minimum word length,为4个字符.所以,你仍然无法对’ak’进行FULLTEXT搜索,因为它太短了.你可以降低最小字长设置,但你最终会得到’the’,’和’以及你不想让你的FULLTEXT索引混乱的所有其他三个和更短的字母单词.
使用LIKE搜索可能是您唯一可行的选择.当您使用前导通配符(‘%ak’)时,MySQL无法使用索引来查找记录.它必须扫描所有行.如果你有覆盖索引,它仍将使用索引进行扫描.
所以,对于您的查询:
SELECT synonym_group FROM synonym WHERE name LIKE '%ak%'
如果你有一个多列,覆盖,索引(name,synonym_group),它实际上仍然会使用索引来回答查询,但不是传统意义上的. MySQL将扫描索引,这通常比扫描实际的表数据(表扫描)更快.此外,理想的系统有足够的RAM来存储RAM中的所有索引,因此它只是扫描内存而不是磁盘.
因此,使用覆盖索引,行的大小将不起作用.
没有覆盖索引,行的大小会影响扫描速度,因为磁盘必须移动得更远.
如果最终执行表扫描,则需要对表进行碎片整理,并且最好具有固定长度的行(CHAR而不是VARCHAR).
内容总结
以上是互联网集市为您收集整理的我的Mysql LIKE语句有多快?全部内容,希望文章能够帮你解决我的Mysql LIKE语句有多快?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。