谁可以编写更有效的查询?

时间:2020-05-14 16:53:31

标签: sql-server

我有此查询,该查询有效,但有没有更有效的书写方式?

SELECT *
FROM table (NOLOCK)  
WHERE ((COL1 = 'aaa' AND COL2 = 'ee')
       OR (COL1 = 'bbb' AND COL2 = 'ff')
       OR (COL1 = 'ccc' AND COL2 = 'gg'))

1 个答案:

答案 0 :(得分:0)

首先,您需要一个复合索引,并且COL1和COL2都位于同一索引上。

CREATE INDEX IX_TABLE_COL1_COL2
ON table (COL1, COL2); 

然后,我将使用更简单的查询的组合,该引擎在通过先前的索引进行单独优化时将不会遇到问题。带有OR的表达式似乎对于引擎来说很难找到最佳的执行计划。

SELECT *
FROM table 
WHERE COL1 = 'aaa' AND COL2 = 'ee'

UNION ALL

SELECT *
FROM table 
WHERE COL1 = 'bbb' AND COL2 = 'ff'

UNION ALL

SELECT *
FROM table 
WHERE COL1 = 'ccc' AND COL2 = 'gg'