前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql like性能优化

mysql like性能优化

作者头像
IT云清
发布2019-01-22 15:04:33
4.3K0
发布2019-01-22 15:04:33
举报
文章被收录于专栏:IT云清IT云清IT云清
网上很多优化like的方法,无非下面几种,抄来抄去的。
我用213万条数据,每条数据50个字段左右(用的真实的生产环境的mysql数据库,和真实的生产环境的数据),做了性能测试;时间记录的次数不多,但是基本都做了10次左右,时间误差不大的,就只记录了3次,结果如下:
结论:
1.LOCATE,INSTR,REGEXP三个函数,效果在like面前没有任何优势。(那些说有明显优势的,难道是用远超213万条数据测试出来的?)
2.效果好坏,取决于能不能用上索引。
3.like,如果要用,那用左匹配,效果是最好的,因为可以用上索引,其他的方式,索引会失效的,速度自然很低。
4.并没有发现什么有效的优化方式。
5.搜索业务,数据量大,不如直接用专业的搜索引擎,比如es之类的。
-- 6015ms   5996ms  6008ms  不用索引

SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('%','奥的斯','%');

EXPLAIN SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('%','飞鸣','%');

-- 5975ms  6037ms  5987ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('%','有限公司');

-- 2ms 2ms 用索引
SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('杭州飞鸣','%');
-- 2ms 2ms  用索引
EXPLAIN  SELECT * FROM `ent_file` WHERE `ent_name` LIKE CONCAT('浙江君时','%');



-- 6265ms  6209ms  不用索引
SELECT * FROM `ent_file` a WHERE LOCATE('杭州飞鸣',a.`ent_name` ) > 0;

-- 6289ms   6234ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE LOCATE('奥的斯',a.`ent_name` ) > 0;


-- 6322ms   6377ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE INSTR(a.`ent_name`,'奥的斯') > 0;



-- 5ms 3ms 31ms 4ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE a.`ent_name`  REGEXP '^杭州' ;

-- 87ms 78ms 75ms  不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE a.`ent_name`  REGEXP '有限责任公司$' ;

- 6056ms  6032ms 不用索引
EXPLAIN  SELECT * FROM `ent_file` a WHERE a.`ent_name`  REGEXP '集团$' ;
-- 这个reverse方式,效果也不明显
SELECT * FROM `ent_file` a WHERE REVERSE(a.`ent_name`) LIKE REVERSE(CONCAT('%','奥的斯')) or a.`ent_name` LIKE CONCAT('奥的斯','%');


-- 表级锁 情况
SHOW STATUS LIKE 'table%';
-- 行级锁 情况
SHOW STATUS LIKE 'innodb_row_lock%';

-- 进程列表
SHOW PROCESSLIST ;

SHOW STATUS ;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 网上很多优化like的方法,无非下面几种,抄来抄去的。
  • 我用213万条数据,每条数据50个字段左右(用的真实的生产环境的mysql数据库,和真实的生产环境的数据),做了性能测试;时间记录的次数不多,但是基本都做了10次左右,时间误差不大的,就只记录了3次,结果如下:
  • 结论:
  • 1.LOCATE,INSTR,REGEXP三个函数,效果在like面前没有任何优势。(那些说有明显优势的,难道是用远超213万条数据测试出来的?)
  • 2.效果好坏,取决于能不能用上索引。
  • 3.like,如果要用,那用左匹配,效果是最好的,因为可以用上索引,其他的方式,索引会失效的,速度自然很低。
  • 4.并没有发现什么有效的优化方式。
  • 5.搜索业务,数据量大,不如直接用专业的搜索引擎,比如es之类的。
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档