分类: Oracle
2012-02-08 13:51:17
使用Semi-Joins和Anti-Joins有的时候能大幅度提高查询的速度,减少IO但它们的使用是有条件的
总结备查:
Semi-Joins用EXISTS或IN的查询
HINT:NL_SJ MERGE_SJ HASH_SJ
前提条件:
1. 查询中不能有任何显式或隐式的distinct操作
2. Where中可以有OR,但EXISTS或IN不能是OR的分支
Anti-Joins用于NOT EXISTS或NOT IN的查询
HINT:NL_AJ MERGE_AJ HASH_AJ
前提条件:
子查询不能返回空值,用以下的方法:
1. 该字段声明为not null
2. 子查询的select中用nvl
3. 子查询的where后加上not null条件