提高MySQL模糊查询效率

路飞
路飞
路飞
43
文章
14
评论
2018年12月19日14:21:34 评论 969 1179字阅读3分55秒

在使用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开头的模糊查询并不满足所有情况。

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;

1.3  POSITION

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

1.4  INSTR

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

1.5  FIND_IN_SET

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

   

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
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
查看MySQL 数据表大小 信息技术

查看MySQL 数据表大小

日常工作中经常使用MySQL存储数据,于是想看看MySQL中这个数据库大小以及每个表的大小,下面总结2种方法仅供参考。 第一种 如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开...
MySQL 1053错误 信息技术

MySQL 1053错误

环境说明: 操作系统:Windows 10 x64 MySQL:5.7 安装在Windows上MySQL服务启动的时候出现1053错误,如下图所示: 原因是MySQL的配置文件my.ini保存格式出错...
PowerDesigner生成MySQL脚本出错 信息技术

PowerDesigner生成MySQL脚本出错

问题描述: 在使用PowerDesigner生成SQL脚本时候,在验证检查过程中出现错误,如下图所示: 同时在查看检查的结果发现如下问题: 这里可以大概知道tb_comment.id 列出现了问题?然...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: