select productname, warehouseid, needsrefill
from tableA
where stockDate > '1/5/2011' and salesDate >= '2/5/2011'
如果stockDate和salesDate都有索引,這個查詢仍然是SARGable ...對嗎?此查詢是否仍然具有兩個不同列的SARGable?
select productname, warehouseid, needsrefill
from tableA
where stockDate > '1/5/2011' and salesDate >= '2/5/2011'
如果stockDate和salesDate都有索引,這個查詢仍然是SARGable ...對嗎?此查詢是否仍然具有兩個不同列的SARGable?
的種類。
它不能執行簡單的查找,一次評估兩個謂詞。
它可以對索引進行範圍查找,其索引列爲stockDate
或salesDate
,另一列爲殘差謂詞。
因此,假設在stockDate, salesDate
這一變化的指數,可用於各種尋求stockDate > '1/5/2011'
,但它仍然需要評估該範圍內的所有匹配的行,看看他們是否符合salesDate
標準。
或者,它可以做一個範圍尋求兩個單獨的索引與前導列stockDate
和salesDate
然後執行索引交集(加入兩個結果),以獲得行匹配AND
。
哎呀,我讀得太快,並認爲這兩個謂詞是同一列... –
他們是SARGable,但這不能保證您的索引將被使用。檢查執行計劃以查看是否使用了任何索引。這取決於你的表中的行數,索引碎片,統計數據等。
從谷歌搜索,看起來像那樣SARGable =不要使用函數。 – tyteen4a03
@TimothyChoi這太簡單了。只要_index_使用相同的函數,就可以使用函數。 –