在条件中排序SQL,以便最常见的是第一个

时间:2016-06-27 16:46:18

标签: sql oracle

考虑到您有一个类似于下面的查询并且要处理数千条记录:

SELECT *
FROM A
WHERE A.COLUMN IN (some list) OR VARIABLE='SOMETHING'

我相信在大多数情况下VARIABLE='SOMETHING'都是真的,你认为将where条件转换为

WHERE VARIABLE='SOMETHING' OR A.COLUMN IN (some list)

使大部分真实(并且在处理要求上明显更轻)条件首先会提高性能?我没有足够的开发数据集来为自己测试这个

1 个答案:

答案 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应该使用两个索引。