请关注我的微信公众号
个人微信公众号
技术交流群 (仅作技术交流):642646237
请关注我的头条号:
结论
非标准的SQL引起优化器判断异常,将其修改成标准写法后,SQL恢复正常。
问题
这个SQL中涉及的表是一个分区表,该SQL扫描了所有分区,分区裁剪特性没有起效。
解决方法
尝试通过引入union all来分解查询,以便于优化器做出更准确的判断。采用这个方法后,确实起效了,当然不可避免会扫描两遍表。
通过调整日期FORMAT格式,优化器很精准地判断了分区,整体SQL性能得到了很大的提高。
分析结论
对于非标准的日期格式,Oracle在复杂逻辑判断的情况下分区裁剪特性无法识别,不起作用。这种情况下,会走全表扫描,结果是正确的,但是执行效率会很低。
通过使用union all,简化了条件判断。使得Oracle在非保准日期格式下也能使用分区裁剪特性,但最佳修改方式还是规范SQL的写法。
网友评论