欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Before After:SQL整容级优化

Before After:SQL整容级优化

2025/4/19 16:58:40 来源:https://blog.csdn.net/xuexiaogang/article/details/147234268  浏览:    关键词:Before After:SQL整容级优化

首先说明这个优化有一定提升,但不是我所期望的

我接到一个涉及优化的SQL,具体内容实在太长。而且可能也不利于阅读。于是我脱敏以及简化一下。SQL中间大量的充斥着
(select 列名1
from t1
where t1.id = t2.id
) A,
(select 列名2
from t1
where t1.id = t2.id
) B,
(select 列名3
from t1
where t1.id = t2.id
) C,

这样的的形式,如果配合实际的列,实际的表。那就太长了。洋洋洒洒数百行。

SQL最后是用到索引的,所以本次不是给索引方向的优化。

就上面的SQL而言,我和对方说,你这个就是t1和t2关联,每一个字段都去关联循环一次,这样平白无故多做了很多次。其实把他放在一行一次性可以完成。这种时候一定要举例。

拿一个样品 A和B两个表

image.png

模拟原始写法是这样的

image.png

那么我给的改写建议是这样的

image.png

从这两个来说结果一致的,可以说基本是等效的。

那么看原始的执行效果

image.png

一共有三步access执行,最终发生了31次逻辑读。

而改写的执行效果

image.png

一共有两步access执行,最终发生了14次逻辑读。
毕竟我少一层括号。 而真实的SQL如果改写了,那么就不是一层,那是几十层了。

这背后的原因我是多少能猜出一点的

这些年站在开发角度看问题就习惯了。
就是需求提一个字段,加一个字段,那么就来一个括号。N表的联合,每次多一个也不方便动之前的,就加吧。流水线作业,铁打的代码流水的开发。今天做完这个,明天还不一定做什么呢?
还有不少企业是外包做,那么就是雇佣兵,明天还在不在这里还一说呢。只管完成眼前任务。
当进度和质量冲突时候,保证进度。进度是影响收入的,质量不是。

最终一定是有优化作用

毕竟少了几十个循环,一定是快了。而且SQL的篇幅是大幅降低。
当然还有一些其他方面的建议没有达成一致。其实很多时候去管管不着调的需求,能有更好的收益。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词