【发布时间】:2016-03-19 18:33:32
【问题描述】:
我正在存储日历事件日期,包括重复事件。桌子可能会变得很大。我的大多数查询都是针对一个月的范围(即 eventstart >= '1/1/2001' 和 eventstop
如果我查询日期列和日期时间列,我会在范围查询中获得更好的性能吗?
【问题讨论】:
-
我不知道,但我会说是的,因为与
datetime的 8 个字节相比,它只有 3 个字节。只是为了记录,你还有smalldatetime,它是 4 个字节,这可能是一个更公平的比较。 -
此外,您的查询将变得更加正确。在您的示例中,
where eventstart >= '1/1/2001' and eventstop <= '1/31/2001'与datetime类型您可能会错过 1 月 31 日上午 10 点的事件,例如,因为您的范围仅在 1 月 31 日早上的午夜前结束。如果它是date列,您的查询将始终选择一月份的任何事件。因此,如果您不需要存储时间,date类型除了速度和存储要求更小之外还有其他优势。 -
@Andrew,smalldatetime 不是 ANSI 标准,建议不要使用它。 msdn.microsoft.com/en-us/library/ms182418.aspx
-
正确定义的索引将比
datetime或date为您提供更多帮助
标签: sql-server query-performance sqlperformance sqldatetime