This question already has answers here:
What are the differences between a clustered and a non-clustered index?
(12个答案)
5年前关闭。
我需要在表中添加适当的
我很困惑,需要澄清几点:
我应该对 我已经阅读了很多有关
我知道我不应该为经常更新的列或表使用索引。在测试阶段之前,我还应该注意什么?如何知道这一切都很好? 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!
马克
(12个答案)
5年前关闭。
我需要在表中添加适当的
index
并需要一些帮助。我很困惑,需要澄清几点:
non-int
列使用索引吗?为什么/为什么不clustered
和non-clustered
索引的文章,但是我仍然无法决定何时使用它们。一个很好的例子将对我和其他许多开发人员有所帮助。 我知道我不应该为经常更新的列或表使用索引。在测试阶段之前,我还应该注意什么?如何知道这一切都很好?
最佳答案
您确实需要将两个问题分开:
1)主键是一个逻辑结构-唯一且可靠地标识表中每一行的候选键之一。实际上,可以是任何东西-INT,GUID,字符串-选择最适合您的方案的东西。
2)集群键(在表上定义“集群索引”的一列或多列)-这是与物理存储相关的事情,在这里,小型,稳定,不断增长的数据类型是您的最佳选择-INT或BIGINT作为默认选项。
默认情况下,SQL Server表上的主键也用作群集键-但这不是必须的!
我要应用的一条经验法则是:任何“常规”表(用于存储数据的表,即查找表等)都应具有集群键。没有聚类密钥真的没有意义。实际上,与通常的看法相反,拥有一个集群键实际上可以加快所有常见的操作-甚至是插入和删除(由于表的组织是不同的,并且通常比使用堆的情况更好-没有集群键的表)。
Kimberly Tripp, the Queen of Indexing上有很多很棒的文章,主题为何要具有聚簇键,以及哪种列最适合用作聚簇键。由于每个表只能获得一个,因此选择右侧的集群键-而不是仅选择任何集群键至关重要。
马克
09-12 13:07