对于您的数据库设计/性能专家来说。
如果您有一个旨在跟踪会计年度期间财务数据的数据库,在X和Y之间执行日期范围类型搜索(如PaymentDate )是更好/更高性能/更清晰,还是更好地保留一个基于int-key的表,其中定义了会计年度期间,并用支付日期和该关键字标记payment表,因此where子句是where FiscalPeriodID = X?
我确信对于较小的数据集,这并不重要,但让我们假设这些数据将在数百万行中。
发布于 2009-08-31 01:14:54
我每天都要处理数百万行数据的仓库,我们发现智能日期密钥是最好的选择。格式为YYYYMMDD。因此,要查找2008年的所有内容,您可以这样做:
select
*
from
gl
where
postdate between 20080101 and 20081231使用索引列,速度非常快,即使是跨十亿行也是如此。这也指向一个日期表,这样我们就可以添加星期几、月份名称或任何其他关于连接日期的信息。
当然,这些仓库通常是为了支持SSAS多维数据集(OLAP数据库)而构建的,因此日期表成为我们的日期维度。在int上连接比在datetime上连接快得多。
发布于 2009-08-31 01:22:22
还要考虑实际datetime或smalldatetime字段的日期部分...4字节整数,表示自1900年1月1日以来的天数。
这可以隐式地、非常快地转换为实际的datetime (因为它与8字节DateTime值的前四个字节完全相同)
您还可以在Where子句中针对实际的DateTime值使用它,因为SQL Server引擎会隐式地将一个转换为另一个,然后再转换回来。
此外,32位(4字节)整数的每个可能值都是内部SQL Server日期时间数据类型的有效日期时间(午夜
发布于 2009-08-31 01:10:32
如果你可以使用smalldatetime,那么它和integer的大小一样--都是4个字节。在幕后,datetime数据类型是整数。
smalldatetime的前2个字节类似于自1900年1月1日以来所经过的天数,后2个字节类似于自午夜以来所经过的秒数。(这可能不准确,但您明白了。)所以这些数据类型是非常有效的。
我认为对smalldatetime字段执行where子句就可以了。
https://stackoverflow.com/questions/1355381
复制相似问题