MySQL中Like模糊查询速度太慢该如何进⾏优化
⽬录
⼀、前⾔:
查看mysql索引⼆、第⼀个思路建索引
三、INSTR
附:Like是否使⽤索引?
总结
⼀、前⾔:
我建了⼀个《学⽣管理系统》,其中有⼀张学⽣表和四张表(⼩组表,班级表,标签表,城市表)进⾏联合的模糊查询,效率⾮常的低,就想了⼀下如何提⾼like模糊查询效率问题注:看本篇博客之前请查看:
⼆、第⼀个思路建索引
1、like %keyword 索引失效,使⽤全表扫描。
2、like keyword% 索引有效。
3、like %keyword% 索引失效,使⽤全表扫描。
使⽤explain测试了⼀下:
原始表(注:案例以学⽣表进⾏举例)
-- ⽤户表
create table t_users(
id int primary key auto_increment,
-- ⽤户名
username varchar(20),
-- 密码
password varchar(20),
-
- 真实姓名
real_name varchar(50),
-- 性别 1表⽰男  0表⽰⼥
sex int,
-- 出⽣年⽉⽇
birth date,
-- ⼿机号
mobile varchar(11),
-- 上传后的头像路径
head_pic varchar(200)
);
建⽴索引
#create index 索引名 on 表名(列名);
create index username on t_users(username);
like %keyword% 索引失效,使⽤全表扫描
explain select id,username,password,real_name,sex,birth,mobile,head_pic
from t_users where username like '%h%';
like keyword% 索引有效。
explain select id,username,password,real_name,sex,birth,mobile,head_pic
from t_users where username like 'wh%';
like %keyword 索引失效,使⽤全表扫描。
三、INSTR
这个我最开始都没听说过,今天查阅了⼀下资料,才知道有这个宝贝东西,
instr(str,substr):返回字符串str串中substr⼦串第⼀个出现的位置,没有到字符串返回0,否则返回位置(从1开始)
#instr(str,substr)⽅法
select id,username,password,real_name,sex,birth,mobile,head_pic
from t_users
where instr(username,'wh')>0 #0.00081900
#模糊查询
select id,username,password,real_name,sex,birth,mobile,head_pic
from t_users
where username like 'whj'; # 0.00094650
⽐较两个效率差距不⼤主要原因是数据较少,最好多准备点原始数据进⾏测试效果最佳
附:Like是否使⽤索引?
  1、like %keyword    索引失效,使⽤全表扫描。但可以通过翻转函数+like前模糊查询+建⽴翻转函数索引=⾛翻转函数索引,不⾛全表扫描。
  2、like keyword%    索引有效。
  3、like %keyword% 索引失效,也⽆法使⽤反向索引。
总结
到此这篇关于MySQL中Like模糊查询速度太慢该如何进⾏优化的⽂章就介绍到这了,更多相关MySQL L
ike模糊查询慢优化内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。