- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sql server设计与优化中DATETIME的一些误区
sql server设计与优化中DATETIME的一些误区
在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你看到表的记录如下图所示,你最先想到的是什么呢?
(图1:数据列表)
你看到这些数据,是不是觉得这样的设计既浪费了存储空间,又使得这个列的索引增大,查询起来更慢,你也想使用一些其它的数据类型来代替这个datetime吧?
其实大家都是这么想的,这个方向是100%正确的,但是在写这篇文章以前,我进入了两个误区:(如果你中了下面的两个误区,那么请你看看这篇文章吧。)
误区一: 把Dates字段的datetime数据类型换成smalldatetime,这样数据就由:‘2009-04-09 00:00:00.000’变为‘2009-04-09 00:00:00’,这个看起来没有减少多少存储空间哦。
误区二:把Dates字段的datetime数据类型换成char(10),这样数据就由:‘2009-04-09 00:00:00.000’变为‘2009-04-09’,这好像能减少很多存储空间哦。
!--[if !supportLists]--二、!--[endif]--分析
在SQL Server 2005版本中保存日期的数据类型只有两种:datetime、smalldatetime,但是在SQL Server 2008版本中新增了一些日期数据类型:time、date、smalldatetime、datetime、datetime2、datetimeoffset,其中的date类型就能满足我们场景中的需求了,如果你幸运的在使用SQL Server 2008的话,那么恭喜你,请使用date数据类型吧。
但是我就比较可悲一点了,在使用SQL Server 2005的前提下,我进入了误区一、误区二。其实这也是因为自己忽略了一下基础性的东西,如果知道不同数据类型的存储空间大小,也许就很轻易的避免这样低级的错误了。
其实你查看表TestDatetime中的Dates字段的时候,看到查询结果中的:“-”、“:”只是用于显示的,并不是真实保存的时候就这样格式的。
datetime占用8个字节,前4个字节存储base date(即1900年1月1日)之前或之后的天数,后4个字节存储午夜后的毫秒数。值范围:1753-01-01 到 9999-12-31。
smalldatetime占用4个字节,前2个字节存储base date(1900年1月1日)之后的天数。后2个字节存储午夜后的分钟数。值范围:1900-01-01 到 2079-06-06。
date占用3个字节,它比smalldatetime的前2个字节多了1字节,所以值的范围更广了。值范围:0001-01-01 到 9999-12-31。
所以,如果你使用char(10)来保存截断的日期,那么你的存储空间反而更大了。
结论: 如果是SQL Server 2005,那么请你使用smalldatetime吧,数据能节约一半,虽然查询的时候看起来没什么改变;如果你是SQL Server 2008,那么请你使用date吧,
虽然3个字节跟4个字节没有多大的差距,但是从设计上和逻辑清晰度上都有很大的提升,而且差距有些时候并不是1个字节的问题,比如当表数据量达到几个亿的时候,还是有差别的,又或者一条记录可能因为差1个字节就刚刚好给8060字节的页瓜分,这些都不容忽视的。
!--[if !supportLists]--三、!--[endif]--测试
下面我们就从数据存储的大小、索引存储的大小、索引使用时候的速度这几个方面进行测试:(这里只测试数据类型:,,数据的内容都是一样的)
!--[if !supportLists]--(一) !--[endif]--测试前奏:
!--[if !supportLists]--1. !--[endif]--创建三种数据类型char(10)、datetime、smalldatetime的表;(表结构如下面SQL)
CREATE TABLE [dbo].[TestDatetime](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Dates] [datetime] NULL,
CONSTRAINT [PK_TestDatetime] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
!--[if !supportLists]--2. !--[
您可能关注的文档
最近下载
- 浙江省七彩阳光新高考研究联盟2024-2025学年高二上学期11月期中考试语文试题 含解析.docx VIP
- 《企业内部控制问题研究—以天方医药为例(论文)》11000字.docx VIP
- 双特变速器培训.pptx
- 助产技术平产接生教案.pdf VIP
- 浙江省七彩阳光新高考研究联盟2024-2025学年高二上学期11月期中联考数学试题含解析.docx VIP
- 青岛地铁笔试历年真题.pdf
- 从农业大国到农业强国.doc VIP
- 上海市虹口区新复兴中学2024—2025学年上学期期中考试九年级数学试卷.docx VIP
- 浙江省七彩阳光新高考研究联盟2024-2025学年高二上学期11月期中联考化学试题含解析.pdf VIP
- 浙江省七彩阳光新高考研究联盟2024-2025学年高二上学期11月期中物理试题含解析.docx VIP
原创力文档


文档评论(0)