如果我在日期时间字段上有一个带有聚簇索引的SQL Server表,那么在插入之前设置为DateTime.Now(来自C#),索引应该是升序还是降序以避免重组表?
感谢。
答案 0 :(得分:28)
并不重要 - 但DateTime真的保证是独一无二的吗?我会避免在一个DateTime上放置聚簇索引 - 我会使用INT IDENTITY或BIGINT IDENTITY,并在DateTime上放置一个常规的非聚集索引(因为这确实不能保证是唯一的......)< / p>
马克
PS:与主键一样,关于群集密钥应该是什么的一般共识是:
构成聚簇键的列(包括该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
如果读取频繁地基于日期时间字段,那么好的选择是日期和身份的复合键 - 按顺序(日期,身份)。