簡體   English   中英

具有OR條件的索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM