此查询是否仍具有两个不同列的SARGable?

时间:2013-12-10 21:36:19

标签: sql sql-server tsql

select productname, warehouseid, needsrefill
from tableA
where stockDate > '1/5/2011' and salesDate >= '2/5/2011'

如果stockDate和salesDate都有索引,那么这个查询仍然是SARGable ......对吗?

2 个答案:

答案 0 :(得分:2)

有点。

它不能执行一次只评估两个谓词的简单搜索。

它可以对具有前导列stockDatesalesDate的索引执行范围搜索,并在另一列上使用残差谓词。

因此,假设stockDate, salesDate上的索引可用于stockDate > '1/5/2011'上的范围搜索,但仍需要评估该范围内的所有匹配行,以查看它们是否符合{{1} }标准。

或者它可以在两个单独的索引上执行范围搜索,其中前导列salesDatestockDate然后执行索引交集(连接两个结果)以获得与salesDate匹配的行。 / p>

答案 1 :(得分:0)

它们是SARGable,但这并不能保证您的索引将被使用。检查执行计划以查看是否使用了任何索引。这取决于表中的行数,索引碎片,统计信息等