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 公众号,将有更多精彩内容分享:

                                                                 

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