SQL小小的改动,竟然效率提高了1000倍

时间:2025-05-11 18:11:18 来源:淘折扣  阅读:(13) 收藏
转载:

同样的SQL同样的数据,迁移了服务器,升级了一个小的数据库版本之后,直接导致查询效率慢了100倍。接下来我们自定义一个 COUNT SQL 去掉C表的连接, 覆盖框架里面自动生成COunt sql 这样执行时间 就缩短到了 10ms 左右了。

前言

小小的改动,竟然让SQL 效率提高了1000倍

今天又是被国产环境教育的一天!!!!!

同样的SQL同样的数据,迁移了服务器,升级了一个小的数据库版本之后,直接导致查询效率慢了100倍。

一个分页统计条数的SQL,在遥遥领先的 服务器 执行 40毫秒,在国产环境竟然达到了 惊人的 10s!

SQL小小的改动,竟然效率提高了1000倍

SQL 优化过程

执行计划分析

  1. 执行计划不一样,国产环境高一个小版本的数据库,查询SQL 时做了三次嵌套,并且存在类型转换
SQL小小的改动,竟然效率提高了1000倍

  1. 瑶瑶领先环境的执行计划是这样的,明显SQL 进行了优化 left join 的C 表直接去掉了,所以只loop了两次
SQL小小的改动,竟然效率提高了1000倍

SQL 优化

  1. 优化类型转换

看到这儿,至少知道怎么优化了,第一 去掉类型的转换,把 is_del = 0 改成数据库的boolea类型,再看一下执行计划

SQL小小的改动,竟然效率提高了1000倍

现在是没有类型的转换了,并且 最里面的一层 loop 循环优化成了 Hash join

这时候 执行时间已经是 300ms 左右了。

2.SQL 优化:去掉left join C 表

接下来我们自定义一个 COUNT SQL 去掉C表的连接, 覆盖框架里面自动生成COunt sql 这样执行时间 就缩短到了 10ms 左右了。

因为 left join C 没有对C表进行任何过滤,并且不会存在一对多的情况,所以直接去掉C表的统计。

总结

本篇文章 通过Explain 分析SQL 的执行计划,定位到了SQL 执行缓慢的原因。 然后通过 覆盖 count 自动生成的SQL,从来减少连表查询。 最后将SQL的查询时间 从 10s 优化到了10ms,提升了1000倍

标签:

热门排行

猜你喜欢

热门标签

扫描二维码打开

周一至周六

9:00-22:00                  

淘折扣  滇ICP备2023000592号-3  滇公网安备53230102000530号   统一社会信用代码:91532300MAC2D0R706 Copyright © 2010 - 2025 https://www.bgaw.cn/ All Rights Reserved