datetime vs bigint

时间:2013-01-09 08:34:47

标签: sql-server tsql

我有几个表必须根据开始和结束日期加入,例如......

SELECT    * 
FROM      [t1] 
JOIN      [t2] 
   ON [t2].[start] BETWEEN [t1].[start] AND [t1].[stop] 
   OR [t2].[stop]  BETWEEN [t1].[start] AND [t1].[stop]
   OR [t2].[start] < [t1].[start] and [t2].[stop] > [t1].[stop]

这些表可能在数百万行中。

我可以选择将start / stop存储为datetime2和/或bigint(自纪元以来的纳秒)。鉴于此选项 - 如果使用bigint,那么是否可以获得性能提升?

任何一种方法都有利弊吗?

我希望整数方法更快 -

2 个答案:

答案 0 :(得分:4)

使用datetime2。除了“人类更容易阅读”之外,更容易人类编程。如果您不使用日期类型来表示日期,那么您将遇到计算间隔,加入其他表格,与外部时间进行比较等问题,例如: getdate()

就效率而言,为了进行比较,服务器几乎肯定会将所有日期类型视为整数。根据您是否经常关注秒数,可能对您开放的唯一速度优势是smalldatetime上的群集,因为它是4个字节。您仍然可以将高分辨率部分保持为单独的real

答案 1 :(得分:1)

只要您使用datetime2类型可能没有区别,因为两种类型的大小相似(datetime2 - 6到8个字节,bigint - 8个字节)。

我认为IO成本将是唯一的瓶颈,因此它取决于您比较的记录数(要读取的记录)以及索引将如何存储datetime2类型。

我会测试&amp;比较你的情况下的两个选项,并选择更好的选项,记住datetime更容易被人阅读。