获取的sql monitor执行计划如下, 执行时间一小时以上,其中一个大分区表(610个分区)的全表扫描消耗占了绝大部分:
SQL代码如下:
问题的关键在于最后一个红框的写法,EP2EAS_ITGOPENACCOUNT_HIST...可能有人会问, FST.TRANDATE字段上使用了函数, 不会对其他的分区表有影响吗?...不会的, 因为FST.TranDate来自LG表,而且LG表的分区字段是LOAD_DATE, 即使是tranDate是分区字段,因为前面已经有了LG.TranDate=to_char(),也可以在这一步就完全分区裁剪...如果我们在SCD子查询内部的STATUS='0'后面也增加一个and LOAD_DATE= :B1 , 结果集等价,效果也是一样的, 就不用做前面那个改动了....这个SQL如果不改, 分区数再逐渐增加, 执行效率还会逐渐变差, 而改写之后的SQL, SQL的执行效率基本上就不会再有大的变化了,除非每天的数据量有很大改变.