SQL SERVER 索引優化——移除鍵查找(書籤查找)或RID查找(二)

SQL SERVER 索引優化

           ——移除鍵查找(書籤查找)或RID查找(二)

前面我已經寫了一篇關於移除鍵查找的文章。這篇文章作爲基礎文章的續,請在繼續閱讀本文之前,先閱讀前面的文章。

我們閱讀了使用覆蓋索引移除鍵查找的文章。覆蓋索引是這樣的一種索引,其包含了SELECT、JOINS、WHERE條件的所有列。在我們的例子中,我們先創建了聚集索引。

-- 創建聚集索引
CREATE CLUSTERED INDEX [IX_OneIndex_ID] ON [dbo].[OneIndex] (
       [ID] ASC
);

基於聚集索引,我們創建瞭如下的非聚集索引。請注意,我們沒有必要兩個索引一起創建。我們可以或者創建覆蓋索引,或者創建包含索引。請注意,我建議的是創建其中一個,而不是兩個都創建。

前面的文章中,我建議包含所有列,但實際上,在所有的非聚集索引中,沒有必要包含聚集索引所包含的列。所有非聚集索引自動包含聚集索引的指針。

我們應該像下面一樣創建前篇文章中提到的索引。

方法1:創建覆蓋非聚集索引

CREATE NONCLUSTERED INDEX IX_OneIndex_Cover
ON dbo.OneIndex(City,Firstname)
with(drop_existing=on);

方法2:創建包含非聚集索引

CREATE NONCLUSTERED INDEX IX_OneIndex_Include
ON dbo.OneIndex(City)
INCLUDE(FirstName,ID)
with(drop_existing=on);

注意,方法1、2創建的索引都沒有包含聚集索引使用的ID字段。讓我們來檢查執行計劃,並比較查詢開銷,同時驗證兩個都使用索引查找,而非索引掃描。

像上面案例討論的一樣,非聚集索引不必要包含聚集索引所包含的列。

如果喜歡,可以掃碼關注SQL Server 公衆號,將有更多精彩內容分享:

                                                                 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章