【问题标题】:What is advantages of non clustered index over primary key (clustered index)非聚集索引比主键(聚集索引)有什么优势
【发布时间】:2011-05-15 14:47:40
【问题描述】:

我有一个表(存储论坛的数据,通常意味着没有编辑和更新只是插入)我有一个主键列,这是我们知道的聚集索引。 请告诉我,如果我在该列(主键列)上创建一个非聚集索引,我会有什么好处吗?

编辑:我的表目前有大约 60000 条记录,最好在其上放置非聚集索引或创建相同的新表并创建索引,然后将记录从旧表复制到新表。

谢谢

【问题讨论】:

  • @Ardman:这不是重复的,我知道集群和非集群之间的区别,但希望针对我的具体情况提出建议。
  • 评论您对问题的编辑:您应该只将新索引添加到现有表中,看看 ALTER TABLE 命令。 60,000 行并不多,创建索引应该不会花费很长时间。
  • 或许您应该将问题标题编辑得更具体一些,例如“将非聚集索引添加到使用与主键聚集索引相同的列的表有什么好处?”跨度>

标签: sql sql-server-2005


【解决方案1】:

我可以看到的唯一可能的优势可能是非聚集索引的叶页上的条目没有那么宽。它们只包含索引列,而聚集索引的叶页是实际的数据行。因此,如果您需要 select count(your_column_name) from your_table 之类的东西,那么扫描非聚集索引将涉及相当少量的数据页。或者,如果索引列的数量大于 1,并且您运行任何不需要来自非索引列的数据的查询,那么再次,非聚集索引扫描会更快。

【讨论】:

    【解决方案2】:
    • 每个表都应该有一个聚集索引
    • 非聚集索引允许包含非常有用的内容
    • 非聚集索引允许在 SQL Server 2008+ 中进行过滤

    注意事项:

    • 主键是一个约束,默认情况下恰好是一个聚集索引
    • 只有一个聚集索引,许多非聚集索引

    【讨论】:

      【解决方案3】:

      聚集索引指定表数据的物理存储顺序(这就是为什么每个表只能有一个聚集索引)。

      如果没有聚集索引,插入通常会更快,因为数据不必按特定顺序存储,只需附加到表的末尾即可。

      另一方面,对键列的索引搜索通常会比较慢,因为搜索不能利用聚集索引的优势。

      【讨论】:

        【解决方案4】:

        一个好处:你可以INCLUDE索引中的其他列。

        【讨论】:

        • 这不是 NCI 优于 CI 的优势,因为 CI 会自动包含所有列。
        猜你喜欢
        • 1970-01-01
        • 2010-09-10
        • 2015-01-27
        • 2013-08-07
        • 2021-12-14
        • 2011-05-21
        • 2021-09-07
        • 1970-01-01
        相关资源
        最近更新 更多