首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server Datetime与Int键性能

SQL Server Datetime与Int键性能
EN

Stack Overflow用户
提问于 2009-08-31 00:56:39
回答 4查看 13.9K关注 0票数 15

对于您的数据库设计/性能专家来说。

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

我确信对于较小的数据集,这并不重要,但让我们假设这些数据将在数百万行中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-31 01:14:54

我每天都要处理数百万行数据的仓库,我们发现智能日期密钥是最好的选择。格式为YYYYMMDD。因此,要查找2008年的所有内容,您可以这样做:

代码语言:javascript
复制
select
    *
from
    gl
where
    postdate between 20080101 and 20081231

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

当然,这些仓库通常是为了支持SSAS多维数据集(OLAP数据库)而构建的,因此日期表成为我们的日期维度。在int上连接比在datetime上连接快得多。

票数 22
EN

Stack Overflow用户

发布于 2009-08-31 01:22:22

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2009-08-31 01:10:32

如果你可以使用smalldatetime,那么它和integer的大小一样--都是4个字节。在幕后,datetime数据类型是整数。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1355381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档