SQL非聚集索引。 “包括”或不包括“包括”

时间:2010-12-28 01:10:37

标签: sql

我最近运行了一个执行计划,SSMS建议我在表中添加一个非聚集索引。

起初我通过DB Diagram gui添加了索引。它给我的索引看起来像这样:

CREATE NONCLUSTERED INDEX [IX_MyTable] ON [dbo].[MyTable] 
(
    [ID_ForeignKey] ASC,
    [ID] ASC
)

这不是它正在寻找的指数。接下来,我在对象资源管理器中右键单击添加了索引。我将它添加到ID_Foreign密钥表中,在“包含的列”页面中,我包含了ID列。它给我的索引看起来像这样:

CREATE NONCLUSTERED INDEX [IX_MyTable] ON [dbo].[MyTable] 
(
    [ID_ForeignKey] ASC
)
INCLUDE ( [ID]) 

这是它正在寻找的指数。

这些指数之间有什么区别?

1 个答案:

答案 0 :(得分:3)

第一个在两列上创建一个索引,按第一列和第二列排序。

第二个索引仅对第一列进行排序,但也携带第二列的数据。这避免了需要返回到表以获取该列的数据。

第一个索引需要对插入和更新进行更多计算,因此如果您不需要索引第二列,请使用索引的第二个版本。两者都将提供您所需的数据,而无需在表格中查找。