Sql-Server
包含列的非聚集索引覆蓋率
如果我有兩個索引:
IDX_1 = (COL1), (COL2) DESC IDX_2 = (COL1) INCLUDE (COL3)
下面定義的單個查詢會涵蓋兩個查詢嗎?Descending 關鍵字是否對使用 INCLUDE 語句覆蓋兩個查詢有任何影響?
IDX_3 = (COL1) INCLUDE (COL2), (COL3)
您沒有向我們展示任何查詢。
也許您問過 IX3 是否會完全替代 1 和 2?如果是這樣的話:
差不多。除了:
- 對於 IX1,SQL Server 可以導航索引樹以查找 COL1 的所有值,並繼續導航樹以查找所有 COL2。
- 此外,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 數據但與索引順序無關。