Sql-Server

包含列的非聚集索引覆蓋率

  • December 10, 2019

如果我有兩個索引:

IDX_1 = (COL1), (COL2) DESC
IDX_2 = (COL1) INCLUDE (COL3)

下面定義的單個查詢會涵蓋兩個查詢嗎?Descending 關鍵字是否對使用 INCLUDE 語句覆蓋兩個查詢有任何影響?

IDX_3 = (COL1) INCLUDE (COL2), (COL3) 

您沒有向我們展示任何查詢。

也許您問過 IX3 是否會完全替代 1 和 2?如果是這樣的話:

差不多。除了:

  1. 對於 IX1,SQL Server 可以導航索引樹以查找 COL1 的所有值,並繼續導航樹以查找所有 COL2。
  2. 此外,IX1 可能有助於消除 COL1、COL2 DESC 的排序。

除上述情況外,據我所知,IX3 將替代 IX1 和 IX2(請評論我錯過的其他情況,我會將它們添加到上面的列表中)。

DESC 與包含的列無關。它們只是“帶來”,它們不會影響索引的任何排序(並且值僅在葉子中)。

不,這不會涵蓋這兩個索引。讓我們回顧一下:

IDX_1 = (COL1), (COL2) DESC

這個是由 COL1 作為主要索引,COL2 作為次要索引

IDX_2 = (COL1) INCLUDE (COL3)

這個是由 COL1 唯一索引的。INCLUDE 只是添加到索引的數據列,而不是索引。

IDX_3 = (COL1) INCLUDE (COL2), (COL3)

該索引按 COL1 排序,就像 IDX_2 一樣,在其數據中包含來自其他兩列的資訊。

根據您的查詢,您可以嘗試這樣的索引:

IDX_4 = (COL1), (COL2) INCLUDE (COL3)

這是按 COL1 排序的,首先,Secondary 是 COL2,索引中包括 Col3 數據但與索引順序無關。

引用自:https://dba.stackexchange.com/questions/255239