【问题标题】:Why does SQL Server 2008 suggest I have the primary key column as an included column in an index为什么 SQL Server 2008 建议我将主键列作为索引中的包含列
【发布时间】:2010-03-15 14:03:02
【问题描述】:

SQL Server 2008 告诉我在包含列字段的索引中包含主键。我以为 PK 会自动返回所有索引?

【问题讨论】:

    标签: sql-server-2008 indexing


    【解决方案1】:

    否 - 不是主键 - 集群键是。

    默认情况下,这在 SQL Server 中是相同的 - 但并非必须如此。很可能在此表中,PK 与集群键不同。在这种情况下,索引将不知道任何 PK。

    主键是一个逻辑结构,用于唯一且清晰地标识表中的每一行。您将其用于 FK 约束等。

    另一方面,集群键是物理索引 - 它是“街道地址”或存储实际物理数据的页码。因此,它包含在同一个表的每个非聚集索引中 - 一旦您在非聚集索引中找到条目,它就会用于查找实际数据行。

    更新:好的,所以我忍不住向“索引女王”金伯利·特里普询问她对这个话题的看法 - 这是她的回答:

    如果 PK 实际上是 CL 密钥,那么 你是对的......它会自动成为 在那里。至于他在“哪里” 告诉 – 我不确定(DMV、DTA、 某处???)。无论如何,我确信 他使用的任何工具都只是 按照查询所需的内容进行。 意思是,该工具甚至没有 看看是不是CL键…… 显式添加它不会添加它 两次,所以这没什么大不了的 全部。

    这有帮助吗?

    【讨论】:

    • 正确,感谢您的澄清。在这种情况下,主键与表中的聚簇键相同。
    • @Raine:好的,所以在这种情况下,你是对的 - 我希望集群键列 = 主键列已经包含在该非聚集索引中。嗯……不知道为什么 SQL Server 会推荐这个作为 INCLUDEd 列,真的……
    猜你喜欢
    • 2023-03-20
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多