MySQL 慢查询优化案例

慈云数据 1年前 (2024-04-09) 技术支持 55 0

​>优质博文:IT-BLOG-CN

MySQL 慢查询优化案例
(图片来源网络,侵删)

一、慢查询优化基本步骤

【1】先运行看看是否真的很慢,注意设置SQL_NO_CACHE(查询时不使用缓存);

【2】where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的 where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高;

MySQL 慢查询优化案例
(图片来源网络,侵删)

【3】explain查看执行计划,是否与2预期一致(从锁定记录较少的表开始查询);

【4】order by limit 形式的 sql语句让排序的表优先查;

【5】了解业务方使用场景;

【6】加索引时参照建索引的几大原则;

【7】观察结果,不符合预期继续从1分析

二、几个慢查询案例

1、复杂语句写法

很多情况下,我们写 SQL只是为了实现功能,这只是第一步,不同的语句书写方式对于效率往往有本质的差别,这要求我们对 mysql的执行计划和索引原则有非常清楚的认识,请看下面的语句:

select
   distinct cert.emp_id
from
   cm_log cl
inner join
   (
      select
         emp.id as emp_id,
         emp_cert.id as cert_id
      from
         employee emp
      left join
         emp_certificate emp_cert
            on emp.id = emp_cert.emp_id
      where
         emp.is_deleted=0
   ) cert
      on (
         cl.ref_table='Employee'
         and cl.ref_oid= cert.emp_id
      )
      or (
         cl.ref_table='EmpCertificate'
         and cl.ref_oid= cert.cert_id
      )
where
   cl.last_upd_date >='2013-11-07 15:03:00'
   and cl.last_upd_date='2013-11-07 15:03:00'
   and cl.last_upd_date='2013-11-07 15:03:00'
   and cl.last_upd_date= 2875
         and oei.node_right = 2875
         and oei.node_right = 2875           
               and oei.node_right = 2875                           
               and oei.node_right 
微信扫一扫加客服

微信扫一扫加客服