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 进行分析。常用的工具有:
mysqldumpslow
mysql profile
mysql explain
具体使用及分析方法在此就不赘述,网上有丰富的资源可以参考sp_service_site 表存在3w条数据。
推荐查阅:
本文通过对比不同SQL查询方法(如in、exists与join)在处理大量数据时的效率,展示了如何有效优化数据库查询速度。文章指出合理的查询设计能够显著提高查询性能,并提供了具体的优化案例。
2913

被折叠的 条评论
为什么被折叠?



