【问题标题】:SQL Server Datetime vs Int key performanceSQL Server Datetime vs Int 关键性能
【发布时间】:2009-08-31 00:56:39
【问题描述】:

为您提供数据库设计/性能专家。

如果您有一个旨在跟踪会计年度期间财务数据的数据库,那么执行日期范围类型搜索(如 X 和 Y 之间的 PaymentDate)是更好/性能更好/更清晰,还是保留一个 int 键更好基于表,其中定义了财政年度期间,并使用付款日期和该键标记付款表,因此 where 子句是 where FiscalPeriodID = X?

我确信对于较小的数据集这无关紧要,但我们假设这些数据将在数百万行中。

【问题讨论】:

    标签: sql-server performance primary-key


    【解决方案1】:

    我每天处理数百万行的仓库,我们发现智能日期键是要走的路。格式为 YYYYMMDD。因此,要查找 2008 年的全部内容,您可以:

    select
        *
    from
        gl
    where
        postdate between 20080101 and 20081231
    

    使用索引列,速度非常快,即使跨 10 亿行也是如此。这也指向一个日期表,因此我们可以添加星期几、月份名称或任何其他关于我们在该连接中拥有的日期的信息。

    当然,这些仓库通常是为支持 SSAS 多维数据集(OLAP 数据库)而构建的,因此日期表成为我们的日期维度。加入 int 比加入日期时间要快得多。

    【讨论】:

    • hrm 是的,现在我可以把你写的东西拿来研究一下,这似乎是一个非常标准的解决方案,尤其是在立方体中。
    • time 部分呢?如果我也必须存储时间怎么办?使用单独的时间字段并将其存储为整数并在需要时进行转换是否很好?
    • 大卫斯坦写了一篇关于它的文章。他说日期字段在 SQL 2008 中有更好的性能。 url: http://www.made2mentor.com/2011/05/date-vs-integer-datatypes-as-primary-key-for-date-dimensions/
    • 您的postdate 是否使用int 数据类型?
    【解决方案2】:

    还要考虑实际日期时间或 smalldatetime 字段的日期部分的实际含义...表示自 1900 年 1 月 1 日以来的天数的 4 字节整数。

    这可以非常快速地隐式转换为实际的日期时间(因为它与 8 字节 DateTime 值的前四个字节完全相同)

    您还可以在 Where 子句中针对实际的日期时间值使用它,因为 SQL Server 引擎会隐式地将一个转换为另一个,然后再转换回来。

    另外,32 位(4 字节)整数的每个可能值都是内部 SQL Server 日期时间数据类型的有效日期时间(午夜)

    【讨论】:

      【解决方案3】:

      如果您可以使用 smalldatetime,它的大小与整数相同 - 均为 4 个字节。在引擎盖下,日期时间数据类型是整数。

      smalldatetime 的前 2 个字节类似于自 1900 年 1 月 1 日以来经过的天数,而后 2 个字节类似于自午夜以来经过的秒数。 (这可能不准确,但你明白了。)所以这些数据类型非常有效。

      我认为对 smalldatetime 字段执行 where 子句就可以了。

      【讨论】:

        【解决方案4】:

        您最终对大型金融数据集所做的是“数据立方体”。

        这基本上是指生成您需要的每个时期的报告的过程,历史记录,因此您不需要执行这些where 子句,您只需查看该时期的数据即可。

        所以没关系。但是,将其存储起来,并实施一个历史数据库,以便更有效地进行长期报告。

        我会使用直接存储在条目上的日期。

        【讨论】:

          猜你喜欢
          • 2012-03-17
          • 1970-01-01
          • 1970-01-01
          • 2020-10-11
          • 2011-11-13
          • 1970-01-01
          • 2021-07-08
          • 2019-07-05
          • 1970-01-01
          相关资源
          最近更新 更多