提高MySQL模糊查询效率

路飞
路飞
管理员
43
文章
评论字数 522阅读1分44秒

提高MySQL模糊查询效率-图片1

在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效率就显得很重要。

1  查询方式

1.1  like

like查询是最常用的模糊查询方式,一般SQL写法如下:

  • field建立索引提高查询效率,但建立索引会带来系统性能损耗
SELECT `column` FROM `table` WHERE `field` like '%keyword%';
SELECT `column` FROM `table` WHERE `field` like 'keyword%';

Explain查看执行情况

虽然在field字段建立了索引,但第一种SQL语句无法使用索引,而且进行了全表搜索,数据量大时,效率会严重下降;第二种写法用到了索引提高了查询性能,但是以keyword开头的模糊查询并不满足所有情况。

提高MySQL模糊查询效率-图片2

1.2  LOCATE

语法:LOCATE('substr',str,pos)
  • 说明
  1. 若pos不存在,返回substr在str中第一次出现的位置,如果substr在str中不存在,返回值为 0 。
  2. 若pos存在,返回substr在str第pos个位置后第一次出现的位置,如果substr在str中不存在,返回值为0。
  • 模糊查询,SQL写法:
SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0;

提高MySQL模糊查询效率-图片3

1.3  POSITION

语法:POSITION('substr' IN `field`)
  • 说明:position可以看做是locate的别名,功能跟locate一样
  • 模糊查询,SQL写法:
SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`);

提高MySQL模糊查询效率-图片4

1.4  INSTR

语法:INSTR(`str`,'substr')
  • 说明:功能跟instr一样
  • 模糊查询,SQL写法:
SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0;

提高MySQL模糊查询效率-图片5

1.5  FIND_IN_SET

语法:FIND_IN_SET(str1,str2)
  • 说明:返回str2中str1所在的位置索引,其中str2必须以","分割开。
  • 模糊查询,SQL写法:
SELECT `column` FROM `table` WHERE FIND_IN_SET('keyword', `filed`);

   提高MySQL模糊查询效率-图片6

1.6  全文索引

全文索引参考:http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html

2  总结

综合来看前面的几种查询方式,由于like的查询局限性,可以用locate, position, instr替代,而且速度上比like要快。

继续阅读
weinxin
微信公众号
分享IT信息技术、北海生活的网站。提供北海本地化的信息技术服务。
 
路飞
  • 本文由 路飞 发表于2018年12月19日 14:21:34
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定