SQLServer的DateTime数据类型优化指南

在SQL Server 2005版本中保存日期的数据类型只有两种:datetime、smalldatetime,但是在SQL Server 2008版本中新增了一些日期数据类型:time、date、smalldatetime、datetime、datetime2、datetimeoffset,其中的date类型就能满足我们场景中的需求了,如果你幸运的在使用SQL Server 2008的话,那么恭喜你,请使用date数据类型吧。

虽然3个字节跟4个字节没有多大的差距,但是从设计上和逻辑清晰度上都有很大的提升,而且差距有些时候并不是1个字节的问题,比如当表数据量达到几个亿的时候,还是有差别的,又或者一条记录可能因为差1个字节就刚刚好给8060字节的页瓜分,这些都不容忽视的。

datetime占用8个字节,前4个字节存储base date(即190011日)之前或之后的天数,后4个字节存储午夜后的毫秒数。值范围:1753-01-01 9999-12-31

smalldatetime占用4个字节,前2个字节存储base date190011日)之后的天数。后2个字节存储午夜后的分钟数。值范围:1900-01-01 2079-06-06

date占用3个字节,它比smalldatetime的前2个字节多了1字节,所以值的范围更广了。值范围:0001-01-01 9999-12-31

       所以,如果你使用char(10)来保存截断的日期,那么你的存储空间反而更大了。

DateTime两个优化误区

误区一:Dates字段的datetime数据类型换成smalldatetime,这样数据就由:‘2009-04-09 00:00:00.000’变为‘22009-04-09 00:00:00’,这个看起来没有减少多少存储空间哦。

       误区二:Dates字段的datetime数据类型换成char(10),这样数据就由:‘2009-04-09 00:00:00.000’变为‘2009-04-09’,这好像能减少很多存储空间哦。

xiaoyao -
共有0个回答