网上有很多SQL优化的案例, 我本人对这方面特别感兴趣,今天就带着大家一起来学习一下专家是如何优化SQL的....优化前的SQL是这个样子的(做了一点简化,去掉了一些无关紧要的干扰信息,看起来更清晰):
对应的执行计划及执行时间:
老虎刘注:
根据执行计划及文章中其他相关信息: t表大概168w记录,n表2400w...首先, exists不能简单改成inner join,除非子查询关联字段有唯一约束;
改写后出现了笛卡尔集(上图执行计划中标注3,下面的NL也相当于笛卡尔), 原来t与m, t与n 是两两关联, 改写后变成了...这是因为这个SQL使用的一组变量, 返回的结果集为空(最后执行计划我标注1和2的地方), 因为t与m关联后结果集为空, n表的全表扫描不需要了(标注4); t与n关联后结果集为空, m表的全表扫描也不需要了..."先分析一下表"(即收集表的统计信息) :这个可能是对SQL优化不太了解的人做调优的第一板斧,但明显这个SQL不适用;
"子查询结果集小用in" : 这个说法要么不是搞oracle数据库的, 要么还在用