mysql 模糊查询like优化方案(亲测)
前言
本文的测试是基于740w条测试数据进行的,只讨论like模糊查询的优化方案。其他SQL优化可参考:
SQL优化的几种方式
查询开头是“今天不开心”的聊天记录,是可以走索引的。
select * from message_1 where content like "今天不开心%”;
查询包含“今天不开心”的聊天记录,是不能走索引的。
select * from message_1 where content like "%今天不开心%";
咱们主要优化的是第二种情况,我本人测试查询耗时是在9秒。
优化方案
对于查询包含某个关键词的需求,从业务上来说应尽量避免这种不合理的需求。
但是实际使用中,总有些类似需求避免不掉模糊查询,就可以采取下列优化方式。
- 稍微优化
select * from message_1 where instr(content, "今天不开心") > 0;
select * from message_1 where locate("今天不开心", content) > 0;
这个方法优化效果有限,这两种方法耗时相差不多,比不优化要快上2~3秒。
我还测试了一些其他的一些情况,这种优化方式,在某些情况下会比优化前还要慢,由此可见这种方式是有坑的
。
比如优化前:
select content from message_1 where content like "%今天不开心%";
优化后:
select content from message_1 where instr(content, "今天不开心") > 0;select content from message_1 where locate("今天不开心", content) > 0;
这种情况,优化后比不优化要慢上2秒左右。。。。
- 大幅度优化
select * from message_1 where content in
(select content from message_1 where content like "%今天不开心%");
这种方法,能将查询优化至3秒左右,优化效果已经很明显。
优化原理:用索引全扫描取代表的全扫描。因为索引全扫描的代价是全表扫描的1/N (即索引块数与数据块数的比例),表数据越多,优化效果越明显。
优化后的sql语句,根据索引再回表的代价要看符合条件的记录数多少:如果in子查询返回的记录数很少,那么优化的效果就相当于效率提高了N倍;如果in子查询返回的记录数较多,两种SQL的性能区别就不是很明显了。
- 根本优化
使用ClickHouse 或者 Elasticsearch 同步数据库。
这两种方式可以从根本上解决模糊查询的高延时,但是需要引入一套新的系统,代价还是不小的。
二者的对比可参考:
Elasticsearch和Clickhouse基本查询对比
ClickHouse 与es比较
mysql 模糊查询like优化方案(亲测)相关推荐
- MySQL模糊查询性能优化
一.背景 我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 如果需要查找客户表中所有姓氏是"孙"的数据 ...
- MySQL模糊查询like优化,再也用不着 like+% 了
我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务 ...
- 微信小程序 连接云数据库(不使用云函数)进行 登录、注册、查询(包括模糊查询)快速实现 亲测可用
当连接MySQL的时候总是出现各种各样的小问题,可以选用微信小程序自带的云数据库 目 录 建立云数据库 建表 导入MySQL中的表 导出 导入 云数据库初始化 登录注册 注册功能 登录功能 查询(模糊 ...
- mysql模糊查询的优化方法--亲自实践
数据有4W多条,不多,但是模糊查询 起来特别慢. 1,尝试过用 select * from (select * from a union all select * from b...很多表union) ...
- mysql模糊查询like优化
1.使用全文索引 MySQL 之全文索引:https://blog.csdn.net/mrzhouxiaofei/article/details/79940958 -- 直接查询400ms SELEC ...
- mysql模糊查询之索引优化
mysql模糊查询之索引优化 三表连查之模糊查询索引优化 注:具体用法10和11步骤. 1.t_project表 DROP TABLE IF EXISTS `t_project`; CREATE TA ...
- mysql模糊查询提速_【MySQL】Mysql模糊查询like提速优化
[MySQL]Mysql模糊查询like提速优化 在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候 ...
- 【mysql】mysql 模糊查询 like 语句
mysql 模糊查询 like 语句 一 like 语句 %xxx%:查询 username 字段中包含 xxx 的记录. select * from user where username like ...
- # Sql语句过长报错、查询慢优化方案探索
Sql 过长查询报错.in过多.查询慢优化方案探索 目录 文章目录 Sql 过长查询报错.in过多.查询慢优化方案探索 目录 背景描述 解决方案 方案1(内存中过滤) 存在问题 方案2 In 查询的内 ...
最新文章
- VB.net实现从ListView控件中异地获取文本内容源代码
- oracle dump 文件解析,oracle 事件转储udump文件
- 设计模式-装饰者模式[Decorator]
- 低学历者为何能骗取30万年薪职位
- 多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...
- Datalogic得利捷推出物流应用领域全新标杆产品——AV900
- android9三星功能,三星开启安卓9.0测试:One UI Beta计划
- Cadence输出Gerber文件
- 高通模式9008模式linux,学会小米9008高通模式_原来刷机如此简单
- HTML5 webSQL动态查询应用截图
- C语言入门-跑步问题
- RPA手把手—— RPA 数据库篇 6 - MySQL 篇 2 - 增删改查 1
- 慎重决定!从自建服务器到选择阿里云
- 华为nova 3e,重新编译内核文件,解除ptrace限制,以使用Frida
- KL散度,JS散度,余弦距离,欧式距离
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- Proxy_代理模式
- shell-xargs
- 乐教乐学显示服务器故障怎么了,乐教乐学常见问题有哪些,如何解决闪退问题...
- RHS和LRS查找区别