首页 资讯 正文

MySQLLike模糊查询速度太慢如何进行优化-世界播资讯

2023-02-14 10:45:34   来源:阿里云    

一、前言:


(资料图片)

我建了一个《学生管理系统》,其中有一张学生表和四张表(小组表,班级表,标签表,城市表)进行联合的模糊查询,效率非常的低,就想了一下如何提高like模糊查询效率问题

注:看本篇博客之前请查看:Mysql中如何查看Sql语句的执行时间

二、第一个思路建索引

1、like%keyword索引失效,使用全表扫描。

2、likekeyword%索引有效。

3、like%keyword%索引失效,使用全表扫描。

使用explain测试了一下:

原始表(注:案例以学生表进行举例)

--用户表

createtablet_users(

idintprimarykeyauto_increment,

--用户名

usernamevarchar(20),

--密码

passwordvarchar(20),

--真实姓名

real_namevarchar(50),

--性别1表示男0表示女

sexint,

--出生年月日

birthdate,

--手机号

mobilevarchar(11),

--上传后的头像路径

head_picvarchar(200)

);

建立索引

#createindex索引名on表名(列名);

createindexusernameont_users(username);

like%keyword%索引失效,使用全表扫描

explainselectid,username,password,real_name,sex,birth,mobile,head_pic

fromt_userswhereusernamelike"%h%";

likekeyword%索引有效。

explainselectid,username,password,real_name,sex,birth,mobile,head_pic

fromt_userswhereusernamelike"wh%";

like%keyword索引失效,使用全表扫描。

三、INSTR

这个我最开始都没听说过,今天查阅了一下资料,才知道有这个宝贝东西,

instr(str,substr):返回字符串str串中substr子串第一个出现的位置,没有找到字符串返回0,否则返回位置(从1开始)

#instr(str,substr)方法

selectid,username,password,real_name,sex,birth,mobile,head_pic

fromt_users

whereinstr(username,"wh")>0#0.00081900

#模糊查询

selectid,username,password,real_name,sex,birth,mobile,head_pic

fromt_users

whereusernamelike"whj";#0.00094650

比较两个效率差距不大主要原因是数据较少,最好多准备点原始数据进行测试效果最佳

关键词: 模糊查询 速度太慢

为你推荐