对超长sql优化体会

来源:互联网 发布:阿里巴巴淘宝商城衣服 编辑:程序博客网 时间:2024/04/28 11:05

        可能对于大多数人对于超长的sql优化,可能看sql去理解逻辑都要花很长时间,尤其在帮别人优化的过程中,在不理解业务的情况下更是无从下手,其实对于超长sql的优化,其实并没有想象中的那么难,对于那些超长sql,我们只需要明白,其中有特殊的操作,比如在sql中有没有视图,有没有子查询,有没有标量查询,这些都是一些要考虑的问题,这只是观察,并不需要我们去理解真正sql想表达的含义。当我们看完sql以后,接下来是去分析执行计划,通过我们观察的sql我们,可以想象到在执行计划中,如果有视图在执行计划中会发生什么,如果有只查询在执行计划中回发生什么,这些都是要能够想象到的。然后再根据返回的行数来确认,嵌套循环是否能用,考虑到这这么多因素以后,我认为优化长sql就不会那么难了。

      今天跟大家分享一个超长sql,但是具体内容我本能贴出来,我只能贴部分执行计划。sql的大概是两个表做hash,即id=2 和id=10 做关联。id=10为一个视图



 

从执行计划可以看出,所以的时间都是花在id=10的视图中,而且id=1的视图最终返回一行结果,这个明显的可以让他走嵌套循环嘛,其实可以走嵌套循环为什么oracle没有选择走呢,按常规来说oracle在于视图做关联的时候默认会把谓词推入的,但是在这里没有。这里可能有两个原因一个id=10视图的原因,一个是谓词推入的开关关掉了。在查看设置以后是开关关掉了,开启开关了20s就把这个sql给跑完了。所以sql也就有话了。

      

0 0
原创粉丝点击