SQL Server:日期时间,ASC或DESC上的聚簇索引

时间:2009-06-25 14:22:18

标签: sql-server clustered-index

如果我在日期时间字段上有一个带有聚簇索引的SQL Server表,那么在插入之前设置为DateTime.Now(来自C#),索引应该是升序还是降序以避免重组表?

感谢。

2 个答案:

答案 0 :(得分:28)

并不重要 - 但DateTime真的保证是独一无二的吗?我会避免在一个DateTime上放置聚簇索引 - 我会使用INT IDENTITY或BIGINT IDENTITY,并在DateTime上放置一个常规的非聚集索引(因为这确实不能保证是唯一的......)< / p>

马克

PS:与主键一样,关于群集密钥应该是什么的一般共识是:

  • 唯一(否则SQL Server会通过添加一个4字节的唯一符来“统一”它)
  • 尽可能缩小
  • 静态(永不改变)
  • 增加

构成聚簇键的列(包括该4字节的唯一符号)将添加到每个非聚集索引中的EVERY ENTRY中 - 因此您希望尽可能保持这些列。

PS 2:集群密钥被添加到每个非聚集索引中,因为这是SQL Server在非聚集索引中找到搜索值后检索整行的方式。这是数据库中行的“位置”,可以这么说。因此,它应该是唯一的并且狭窄

答案 1 :(得分:5)

阅读此http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx

如果读取频繁地基于日期时间字段,那么好的选择是日期和身份的复合键 - 按顺序(日期,身份)。