使用Oracle语句中的OR和优化where子句

使用Oracle语句中的OR和优化where子句,oracle,oracle11g,Oracle,Oracle11g,我的选择是: SELECT * FROM Table1 t1, Table2 t2 WHERE t1.ID=t2.ID AND (t1.EmpDate IS NULL OR t1.TERMDT > SYSDATE) -- Item1 AND t2.DIVISION IN ('D1','D2','D3','D4','D5','D6','D7','D8','D9','D10') --Item2 Item1和Item2分别导致表1和表2上的完整表扫描。 我已经把t2编入了索引 我如何优化它

我的选择是:

SELECT *
FROM Table1 t1, Table2 t2
WHERE t1.ID=t2.ID
AND (t1.EmpDate IS NULL OR t1.TERMDT > SYSDATE)  -- Item1
AND t2.DIVISION IN ('D1','D2','D3','D4','D5','D6','D7','D8','D9','D10')  --Item2
Item1和Item2分别导致表1和表2上的完整表扫描。 我已经把t2编入了索引

我如何优化它

我可以用2个选择的并集替换Item1中的OR吗?
感谢您的建议。

为什么您认为完整扫描不正确?您对
t2.division
的谓词有多大的选择性(列表中
t2
行中有多少部分具有
division
值)?t2中99%的行都有这些除法代码。那么,为什么您认为在
t2.division
上使用索引比执行完整表扫描更有效?添加索引只是为了看看它是否会加快查询速度。为什么您认为有比Oracle发现的更有效的方法来评估查询?为什么您希望这里有一些东西需要优化?