Osc*_*eli 2 sql-server smalldatetime datetime2
我已经阅读了几篇有关在SQL Server中使用支持日期的数据类型的文章,但是我仍然不确定要使用哪种数据。
所有人都说使用新的强大datetime2类型,但是smalldatetime在内存方面(6字节对4字节)仍然更加方便
这是我的范围:
以这种方式定义的表:
Date: typeof(<Date type to choose>)
Value1: typeof(int)
Value2: typeof(int)
Value3: typeof(int)
Run Code Online (Sandbox Code Playgroud)
然后我有这些要求:
对于Date列,我需要精确到分钟。
在这个表中,我每天将存储多达一百万条如此大的大数据。
我的问题是:我是否必须使用smalldatetype每天为我节省2 mb 的旧机?
要么
我应该使用新的功能强大的datetime2数据类型吗?
谢谢
datetime2(2)是6个字节,不仅可以让您获得秒数,而且还可以达到2毫秒(00:00:00.00通过23:59:59.99)。
smalldatetime 是4个字节,每行有可能为您节省2个字节,如果此列是群集键的一部分,则保存的这2个字节将对每个非群集索引产生影响。
的一个重要功能smalldatetime是它四舍五入到最接近的分钟,而不是舍弃秒。根据将数据插入表的方式以及是否需要此行为,可能需要先对该值进行额外的预处理,然后再将其插入表中。
例:
create table t (sdt smalldatetime, dt2 datetime2(2))
insert into t values
('2017-01-01T11:22:22.33','2017-01-01T11:22:22.33')
,('2017-01-01T11:22:33.33','2017-01-01T11:22:33.33')
select
sdt = convert(char(23),sdt,121)
, dt2 = convert(char(23),dt2,121)
from t
Run Code Online (Sandbox Code Playgroud)
extrester演示:http://rextester.com/JPMEE57778
返回:
+-------------------------+-------------------------+
| sdt | dt2 |
+-------------------------+-------------------------+
| 2017-01-01 11:22:00.000 | 2017-01-01 11:22:22.33 |
| 2017-01-01 11:23:00.000 | 2017-01-01 11:22:33.33 |
+-------------------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢这种舍入方法,因此datetime2(2)尽管每天节省2mb钱,除非它是群集密钥的一部分,否则这足以满足我的需求。
参考:
smalldatetimedatetime2| 归档时间: |
|
| 查看次数: |
7735 次 |
| 最近记录: |