我有此查询,该查询有效,但有没有更有效的书写方式?
SELECT *
FROM table (NOLOCK)
WHERE ((COL1 = 'aaa' AND COL2 = 'ee')
OR (COL1 = 'bbb' AND COL2 = 'ff')
OR (COL1 = 'ccc' AND COL2 = 'gg'))
答案 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'