This question already has answers here:
What are the differences between a clustered and a non-clustered index?

(12个答案)


5年前关闭。




我需要在表中添加适当的index并需要一些帮助。

我很困惑,需要澄清几点:
  • 我应该对non-int列使用索引吗?为什么/为什么不
  • 我已经阅读了很多有关clusterednon-clustered索引的文章,但是我仍然无法决定何时使用它们。一个很好的例子将对我和其他许多开发人员有所帮助。

  • 我知道我不应该为经常更新的列或表使用索引。在测试阶段之前,我还应该注意什么?如何知道这一切都很好?

    最佳答案

    您确实需要将两个问题分开:

    1)主键是一个逻辑结构-唯一且可靠地标识表中每一行的候选键之一。实际上,可以是任何东西-INT,GUID,字符串-选择最适合您的方案的东西。

    2)集群键(在表上定义“集群索引”的一列或多列)-这是与物理存储相关的事情,在这里,小型,稳定,不断增长的数据类型是您的最佳选择-INT或BIGINT作为默认选项。

    默认情况下,SQL Server表上的主键也用作群集键-但这不是必须的!

    我要应用的一条经验法则是:任何“常规”表(用于存储数据的表,即查找表等)都应具有集群键。没有聚类密钥真的没有意义。实际上,与通常的看法相反,拥有一个集群键实际上可以加快所有常见的操作-甚至是插入和删除(由于表的组织是不同的,并且通常比使用堆的情况更好-没有集群键的表)。

    Kimberly Tripp, the Queen of Indexing上有很多很棒的文章,主题为何要具有聚簇键,以及哪种列最适合用作聚簇键。由于每个表只能获得一个,因此选择右侧的集群键-而不是仅选择任何集群键至关重要。

  • GUIDs as PRIMARY KEY and/or clustered key
  • The clustered index debate continues
  • Ever-increasing clustering key - the Clustered Index Debate..........again!
  • Disk space is cheap - that's not the point!

  • 马克

    09-12 13:07