MySQL Like模糊查询速度太慢如何进行优化

🍅程序员小王的博客:程序员小王的博客
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
🍅java自学的学习路线:java自学的学习路线

一、前言:

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

  • 比较两个效率差距不大主要原因是数据较少,最好多准备点原始数据进行测试效果最佳
  • 26
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
进行百万级别的数据量进行LIKE查询,由于LIKE操作的模糊匹配特性,会导致查询速度变慢。这是因为MySQL进行LIKE查询需要遍历每一条数据,并逐个进行匹配,这个过程消耗了大量的间和资源。 为了优化LIKE查询的速度,可以考虑以下几个方案: 1. 使用索引:在需要进行LIKE查询的列上创建索引,可以大大提高查询速度。可以使用全文索引(Full-text index)或者前缀索引(Prefix index)来加快模糊匹配的检索速度。 2. 使用全文搜索引擎:MySQL提供了全文搜索引擎(如MyISAM引擎),可以更高效地处理模糊匹配的查询。全文搜索引擎支持更为灵活的查询语法,并具有更好的性能。 3. 分页查询:如果查询结果集很大,可以考虑使用分页查询来减少单次查询的数据量,从而提高查询速度。通过限制每次查询的数据量,可以减少LIKE匹配的开销,并提升查询性能。 4. 使用其他查询优化技术:可以使用其他MySQL的查询优化技术,如查询缓存、表分区、分表等,来改善数据库的性能。这些技术可以通过合理的数据库设计和查询规划,减少LIKE查询的压力。 总结起来,对于MySQL中百万级别的数据进行LIKE查询,可以通过创建合适的索引,在数据库设计和查询规划上做出优化,以提高查询性能和效率。同,可以考虑使用全文搜索引擎等更高效的工具来处理模糊匹配的查询。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小王java

学习java的路上,加油!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值