[英]Index with OR condition
我有一個類似的查詢:
SELECT * FROM User
WHERE Name = 'Username1' OR Name = 'Username2'
當我執行它並查看執行計划時,我發現有一個Number of executions = 1
NonClustered Index Seek
和一個Number of executions = 2
Key Lookup
,這很好,因為它發現了2個結果。
但是我不明白它如何在索引中同時搜索2個不同的值。 對我來說,非NonClustered Index Seek
執行兩次是合乎邏輯的。 一次用於Username1
,一次用於Username2
。 因為這些值在索引樹中的不同部分,所以如何用一個索引查找來搜索更多的值?
您必須從左到右考慮查詢的執行順序,一旦理解了這一點,事情就會變得更加簡單。
以下是Paul White的引用: 迭代器,查詢計划以及它們為何向后運行
查詢計划的執行從根開始,然后通過一系列嵌套的方法調用向下執行。 數據以相反的方向從計划中拉出:從葉子到根,一次一行。
對我來說,非聚集索引查找執行兩次是合乎邏輯的。
集群索引查找運算符不會執行兩次(而是嵌套循環),因為存儲引擎會記住初始查找位置,然后嘗試查找另一個值。如果該值在同一頁上,則讀為零,如果在另一頁上,則為零,然后再讀一本
有關更多信息,請參見dba.se上的問題:
https://dba.stackexchange.com/questions/134172/set-statistics-io-for-nested-loops
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.