【问题标题】:I am using SQL Server 2008, is it ok to define an Index on a DateTime column?我使用的是 SQL Server 2008,可以在 DateTime 列上定义索引吗?
【发布时间】:2009-07-02 10:00:51
【问题描述】:

我在某处听说在日期列上声明索引不利于性能,但我在互联网上找不到任何参考资料。

建议?

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    SQL Server 2005 中的DateTime(以及SQL Server 2008 中)存储为8-byte 值,包括:

    • 第一个 4 字节(日期部分)中自 Jan 1, 1900 以来的天数
    • 从午夜到第二个4 字节(时间部分)的1/300 滴答数

    索引这个值是完全可以的。

    【讨论】:

      【解决方案2】:

      这将取决于针对数据库运行的活动模式。如果您针对 DateTime 执行大量 WHERE,则索引可能会有所帮助。如果您正在执行大量插入,并且它们的顺序不连续,那么您的插入速度可能会影响更新索引。

      与所有性能问题一样,在更改前后使用典型工作负载测试性能,这是真正了解更改是否有帮助的唯一方法。

      【讨论】:

        【解决方案3】:

        为什么不能在某个日期创建索引?

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

        搜索会更快;更新和插入会稍微慢一些,因为 Sql Server 也必须维护索引,但是这种“性能损失”是如此微不足道,以至于您甚至都不会注意到它

        【讨论】:

          【解决方案4】:

          DateTime 数据类型存储为数字,因此其上的索引没有性能问题。

          【讨论】:

            【解决方案5】:

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

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

            例如,许多存储过程在 WHERE 子句中使用该字段,因此在其中放置索引可能有助于提高性能。

            【讨论】:

              【解决方案6】:

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

              http://msdn.microsoft.com/en-us/library/aa933131(SQL.80).aspx

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

              【讨论】:

              • ahhh 没那么快 - DateTime NOT 保证是唯一的,这是集群键的主要要求之一。如果您不提供有保证的唯一密钥,MS SQL Server 将安全地使用它并添加一个 4 字节的“唯一性”,这会使密钥变得更大。请注意这一点!
              • 我不知道唯一性 (sqlfool.com/2009/05/overhead-i-non-unique-clustered-indexes)。我建议在日期列之后添加构成聚集索引唯一键的其他列。
              【解决方案7】:

              虽然让索引提防经常过时的统计信息和不一致的性能差异可能是件好事。 http://sqlbits.wordpress.com/2009/08/23/tip-3-beware-of-indexes-on-datetime-columns/

              【讨论】:

                猜你喜欢
                • 2011-01-13
                • 2010-11-23
                • 1970-01-01
                • 2015-01-03
                • 1970-01-01
                • 1970-01-01
                • 2011-01-25
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多