首页 > 数据库 >mysql like性能优化

mysql like性能优化

时间:2023-01-14 21:39:15浏览次数:36  
标签:like -- WHERE ent file mysql 优化 SELECT name


网上很多优化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 ;


标签:like,--,WHERE,ent,file,mysql,优化,SELECT,name
From: https://blog.51cto.com/u_15936016/6007788

相关文章

  • mysql 处理空格数据
    mysql中有处理空格的函数,做个简单介绍:1.TRIM()函数这个函数的用法很简单,但是无法去除中间的空格--去除左右空格SELECTTRIM('fdfd');SELECTTRIM(BOTH''FROM'......
  • MySQL 高可用:mysql-mmm 部署
    基本信息和规划:#服务器信息:====================================================================ipaddresshostnameServerVersionMySql------------------......
  • Tapdata Cloud 场景通关系列:数据入湖仓之 MySQL → Doris,极简架构,更实时、更简便
    【前言】作为中国的“Fivetran/Airbyte”,TapdataCloud自去年发布云版公测以来,吸引了近万名用户的注册使用。应社区用户上生产系统的要求,TapdataCloud3.0将正式推......
  • SQL---mysql新增字段
    ALTERTABLEpeopleADDCOLUMNnameVARCHAR(100)DEFAULTNULLCOMMENT'姓名'AFTERage;  修改表people 增加字段 name  长度100 默认为null 备注:姓名......
  • SQL---mysql删除重复数据
    开发时,经常会有清理数据库中重复数据的需求,比如下面这张表report_apply :我们需要删除report_name重复的数据,具体步骤如下:--重复数据SELECTreport_namefromreport_apply......
  • MySQL高级【行级锁】
    1:行级锁1.1:介绍行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引......
  • k8s运行mysql主从架构
    namespacemysql-ns.yamlapiVersion:v1kind:Namespacemetadata:labels:kubernetes.io/metadata.name:wgs-mysqlname:wgs-mysql创建ns#kubectlapply-fmysql-n......
  • 线段树优化建图学习笔记
    使用场景:单点向区间,区间向单点或区间向区间建边。实现原理:用线段树的一个节点管辖一段图上区间的顶点。实现步骤:将原图中的顶点拆点(理论上,实际代码中不需要),出点和入点......
  • 如何高效高性能的选择使用 MySQL 索引?
    想要实现高性能的查询,正确的使用索引是基础。本小节通过多个实际应用场景,帮助大家理解如何高效地选择和使用索引。1.独立的列独立的列,是指索引列不能是表达式的一部分,也......
  • Docker 安装mysql8
    1、获取镜像dockerpullmysql:82、创建数据卷必须创建数据卷,不然容器挂了数据就丢了dockervolumecreatemysql-data#创建dockervolumels#查看所有数据......