【问题标题】:Is the new Date better than the old Date?新日期比旧日期好吗?
【发布时间】:2011-05-31 15:01:59
【问题描述】:

我们的数据仓库中有一个 CalendarTimeUTC 维度表,如下所示:

表中的 PK 是 CalendarTimeUTCId(集群)。这曾经是一个 Int 字段。所有事实表中都有 CalendarId(其中一些是数十亿行的分区表)。

我们希望在此字段中将 DATE 值改为 DATE+HOUR 值。

样本数据(旧的和新的):

现在随着 SQL 2008 的出现以及 DATETIME 的闪亮新实现,是否有理由将维度的 ID 列从 INT 切换到 DATETIME?

它将如何影响事实表中的索引大小?更重要的是,它将如何影响性能?

【问题讨论】:

  • 我不会在日期字段中输入小时数 - 您的日历维度中的记录要多 24 倍......
  • 我很难理解它是如何与date 类型相关联的。以前(在 SQL Server 2008 之前,我理解)您的日历表只包含日期,但值是 datetime 类型,因为当时 SQL Server 中没有 date 类型。现在您计划添加时间部分,并且您必须再次使用datetime。那么你暗示date是什么意思?
  • @Andriy M:我的输入错误——我的意思是DATETIME
  • Raj,你为什么要这样做? Sql Server 2005 具有 DateTime 数据类型。 2008 版的哪一部分是闪亮的和新的?为什么要创建一个看起来像日期的 id?为什么要存储看起来像 ID 的日期?您的日历维度表中是否还有其他未显示的字段?

标签: sql performance sql-server-2005 sql-server-2008-r2


【解决方案1】:

Datetime 数据类型占用 8 个字节。 Int 数据类型仅占用 4 个字节。如果您想要转换为 date 数据类型(例如,因为您需要使用日期操作函数),我建议您使用 smalldatetime 只占用 4 个字节。

就索引和性能而言:因为索引将基于相同物理大小的数据,我认为您不会看到性能下降或索引大小增加。

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多