1 单表or访问
这种情况,OB在执行or时常常采用全表扫描,不考虑索引merge的方法。如
select * from distribute_box_info where doc_no='123' or pushtype='100'; 表在doc_no和pushtype上有索引
执行计划:
这种情况下,执行非常慢。
可以考虑使用hint来展开or :/*+ USE_CONCAT*/
执行计划如下:
速度快很多。
在生产中可以使用outline来绑定执行计划:
CREATE OUTLINE fixplan_NNNNNNNN on "XXXXXXXXXX" using hint /*+ USE_CONCAT*/ ;
2 SQL条件中or + exists情况
这种情况下,有时会走filter操作来过滤,性能很差,也需要采用USE_CONCAT来展开:
例子:
SQL执行需要2秒多,执行计划中行数估计有问题。
优化方法,优化后0.5ms:
使用USE_CONCAT是解决or性能问题有力方法。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




