21

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

谢谢。

4

2 回答 2

34

没关系 - 但 DateTime 真的保证是唯一的吗?我会避免只在 DateTime 上放置一个聚集索引 - 我会改用 INT IDENTITY 或 BIGINT IDENTITY,并在 DateTime 上放置一个常规的非聚集索引(因为这真的不能保证是唯一的......)

马克

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

  • 唯一的(否则 SQL Server 将通过向其添加 4 字节唯一符来“唯一化”它)
  • 尽可能_
  • 静态(永不改变)
  • 不断增加

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

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

于 2009-06-25T14:25:19.457 回答
7

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

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

于 2012-04-19T03:49:52.097 回答