sql优化之慢sql优化实践 -- 点滴

sp_order_day_current     表存在480w条数据       关联sp_service_site表id的外键sj_site

sp_service_site               表存在3w条数据

 


1
2
3
4
5
6
7
8
9
-- in的写法     22秒
select * from sp_order_day_current where sj_site in(select id from (select id from sp_service_site where site_type=1 limit 0,10)b)
 
-- exists的写法    14秒
select a.sj_site from sp_order_day_current a where  
exists (select id from (select id from sp_service_site where site_type=1 limit 0,10) b where  a.sj_site= b.id) GROUP BY a.sj_site 
 
-- 优化后的结果    1秒不到
select sj_site from sp_order_day_current a join (select id from sp_service_site where site_type=1 limit 0,10) b on (a.sj_site = b.id GROUP BY a.sj_site)


总结:

先limit,在条件,在分组,在排序。

能用关联查询,不用exists判断,更不用in子查询。


分析诊断工具

在日常开发工作中,我们可以做一些工作达到预防慢 SQL 问题,比如在上线前预先用诊断工具对 SQL 进行分析。常用的工具有:

  1. mysqldumpslow

  2. mysql profile

  3. mysql explain

具体使用及分析方法在此就不赘述,网上有丰富的资源可以参考sp_service_site 表存在3w条数据。




推荐查阅:

使用SQL语句监控数据库性能

数据库索引优化,和锁优化

mysql数据库开发常见问题及优化

MySQL面试题

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值