暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OB or

eof007 2025-04-22
122

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论