考虑到您有一个类似于下面的查询并且要处理数千条记录:
SELECT *
FROM A
WHERE A.COLUMN IN (some list) OR VARIABLE='SOMETHING'
我相信在大多数情况下VARIABLE='SOMETHING'
都是真的,你认为将where条件转换为
WHERE VARIABLE='SOMETHING' OR A.COLUMN IN (some list)
使大部分真实(并且在处理要求上明显更轻)条件首先会提高性能?我没有足够的开发数据集来为自己测试这个
答案 0 :(得分:4)
与更多性能问题一样,您应该测试这两个版本。但是,除非列表相当长,否则这可能不会对性能产生影响。
您可以尝试添加索引,尤其是A(column)
和A(variable, column)
。 Oracle在使用索引方面很聪明,但在这种情况下可能不够智能(您需要查看执行计划)。您可以将查询重新命名为:
SELECT *
FROM A
WHERE VARIABLE = 'SOMETHING'
UNION ALL
SELECT *
FROM A
WHERE A.COLUMN IN (some list) AND VARIABLE <> 'SOMETHING';
在这种情况下,Oracle应该使用两个索引。