About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc
全部博文(169)
分类: Oracle
2020-06-16 16:41:38
类FILTER问题主要体现在UPDATE关联更新和标量子查询中,虽然此类SQL语句中并未显式出现FILTER关键字,但是内部操作和FILTER操作如出一辙。
先看下UPDATE关联更新:
这里需要更新14999行,执行计划如下:
UPDATE
(SELECT a.status astatus,
b.status bstatus
FROM old_tab a,
new_tab b
WHERE a.id=b.id
AND a.id >9000000
)
SET
astatus=bstatus;
要求b.id是preserved
key (唯一索引、唯一约束、主键),11g bypass_ujvc会报错,类似MERGE操作。
再来看看标量子查询,标量子查询往往也是引发严重性能问题的杀手:
标量子查询的计划和普通计划的执行顺序不同,标量子查询虽然在上面,但是它由下面的CUSTOMERS表结果驱动(上面的在后面执行,这个与普通执行计划顺序不同),每行驱动查询一次标量子查询(有CACHE例外),同样类似FILTER操作。
如果对标量子查询进行优化,一般就是改写SQL,将标量子查询改为外连接形式(在约束和业务满足的情况下也可改写为普通JOIN):
未完待续,见PART5: