我使用的是SQL Server 2008,可以在DateTime列上定义索引吗?

我使用的是SQL Server 2008,可以在DateTime列上定义索引吗?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在某处听说在日期列上声明索引对性能有害,但我在互联网上找不到任何参考 建议?为什么不可以在日期上创建索引 如果您定期对该列执行搜索或排序,我认为在其上添加索引是一个好主意 搜索速度会更快;更新和插入会稍微慢一些,因为Sql Server也必须维护索引,但这种“性能损失”非常小,您甚至不会注意到它日期时间数据类型存储为数字,因此索引上没有性能问题。它将取决于针对数据库运行的活动模式。如果你在DateTime上做了很多事情,那么索引可能会有所帮助。如果你正在做大量的插入,并且它们不是连续的,那么你

我在某处听说在日期列上声明索引对性能有害,但我在互联网上找不到任何参考


建议?

为什么不可以在日期上创建索引

如果您定期对该列执行搜索或排序,我认为在其上添加索引是一个好主意


搜索速度会更快;更新和插入会稍微慢一些,因为Sql Server也必须维护索引,但这种“性能损失”非常小,您甚至不会注意到它

日期时间数据类型存储为数字,因此索引上没有性能问题。

它将取决于针对数据库运行的活动模式。如果你在DateTime上做了很多事情,那么索引可能会有所帮助。如果你正在做大量的插入,并且它们不是连续的,那么你的插入速度可能会影响索引的更新


与所有性能问题一样,在更改前后使用典型工作负载测试性能,这是真正知道更改是否有用的唯一方法。
DateTime
SQL Server 2005
中(在
SQL Server 2008
中也是如此)存储为
8
字节值,包括:

  • 自1900年1月1日起的第一个
    4
    字节(日期部分)中的天数
  • 第二个
    4
    字节中从午夜开始的
    1/300
    滴答数(时间部分)

为该值编制索引完全可以。

如果您的数据基于此日期,并且主要使用日期操作进行搜索,则最好将日期设置为表的聚集索引中的第一列。这样,所有数据都将基于此日期值组织在一个堆中,并将导致基于日期的快速查询


默认情况下,表上的主键创建为聚集索引。这可能不是你想要的。您可以在SQL Server Management Studio的表属性编辑器中更改索引类型。

将索引放在日期字段上非常好

您需要问自己的问题是,在日期字段上添加索引会给您带来什么好处


e、 g许多存储过程在WHERE子句中使用该字段,因此在该字段中添加索引可能有助于提高性能。

尽管让索引注意经常过时且性能差异不一致的统计信息可能会更好。

ahhh没有那么快-日期时间不能保证唯一,这是群集密钥的主要要求之一。如果您不提供有保证的唯一密钥,MS SQL Server将出于安全考虑,添加一个4字节的“唯一化器”,这会使密钥变得更大。请注意这一点!我不知道唯一者()。我建议在日期列之后添加构成聚集索引唯一键的其他列。