对于表列数据类型选择的一点思考.doc

对于表列数据类型选择的一点思考.doc

ID:18653195

大小:208.00 KB

页数:6页

时间:2018-09-20

对于表列数据类型选择的一点思考.doc_第1页
对于表列数据类型选择的一点思考.doc_第2页
对于表列数据类型选择的一点思考.doc_第3页
对于表列数据类型选择的一点思考.doc_第4页
对于表列数据类型选择的一点思考.doc_第5页
资源描述:

《对于表列数据类型选择的一点思考.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、简介   SQLServer每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别。本篇文章对SQLServer表列数据类型的选择进行一些探索。 一些数据存储的基础知识   在SQLServer中,数据的存储以页为单位。八个页为一个区。一页为8K,一个区为64K,这个意味着1M的空间可以容纳16个区。如图1所示:      图1.SQLServer中的页和区    如图1(PS:发现用windows自带的画图程序画博客中的图片也不错)可以看出,SQLServer中的分配单元分为三

2、种,http://tudou.fzl1314.com分别为存储行内数据的In_Row_Data,存储Lob对象的LOB_Data,存储溢出数据的Row_Overflow_data。下面我们通过一个更具体的例子来理解这三种分配单元。   我建立如图2所示的表。      图2.测试表    图2的测试表不难看出,通过插入数据使得每一行的长度会超过每页所能容纳的最大长度8060字节。使得不仅产生了行溢出(Row_Overflow_Data),还需要存储LOB的页.测试的插入语句和通过DBCCIND看到的分配情况如图3所示。   

3、   图3.超过8060字节的行所分配的页    除去IAM页,这1行数据所需要三个页来存储。首先是LOB页,这类是用于存储存在数据库的二进制文件所设计,当这个类型的列出现时,在原有的列会存储一个24字节的指针,而将具体的二进制数据存在LOB页中,除去Text之外,VarBinary(max)也是存在LOB页中的。然后是溢出行,http://qq.qqq23.com在SQLServer2000中,一行超过8060字节是不被允许的,在SQLServer2005之后的版本对这个特性进行了改进,使用Varchar,nvarchar

4、等数据类型时,当行的大小不超过8060字节时,全部存在行内In-rowdata,当varchar中存储的数据过多使得整行超过8060字节时,会将额外的部分存于Row-overflowdata页中,如果update这列使得行大小减少到小于8060字节,则这行又会全部回到in-rowdata页。 数据类型的选择   在了解了一些基础知识之后。我们知道SQLServer读取数据是以页为单位,更少的页不仅仅意味着更少的IO,还有更少的内存和CPU资源消耗。所以对于数据选择的主旨是:   尽量使得每行的大小更小   这个听起来非常简单

5、,但实际上还需要对SQLServer的数据类型有更多的了解。   比如存储INT类型的数据,按照业务规则,能用INT就不用BIGINT,能用SMALLINT就不用INT,能用TINYINT就不用SMALLINT。   所以为了使每行的数据更小,则使用占字节最小的数据类型。   1.比如不要使用DateTime类型,而根据业务使用更精确的类型,如下表:类型所占字节Date(仅日期)3Time(仅时间)5DateTime2(时间和日期)8DateTimeOffSet(外加时区)10    2.使用VarChar(Max),Nva

6、rchar(Max),varbinary(Max)来代替text,ntext和image类型   根据前面的基础知识可以知道,对于text,ntext和image类型来说,每一列只要不为null,即使占用很小的数据,也需要额外分配一个LOB页,这无疑占用了更多的页。而对于Varchar(Max)等数据类型来说,当数据量很小的时候,存在In-row-data中就能满足要求,而不用额外的LOB页,只有当数据溢出时,才会额外分配LOB页,除此之外,Varchar(Max)等类型支持字符串操作函数比如:·COL_LENGTH·CHA

7、RINDEX·PATINDEX·LEN·DATALENGTH·SUBSTRING    3.对于仅仅存储数字的列,使用数字类型而不是Varchar等。    因为数字类型占用更小的存储空间。比如存储123456789使用INT类型只需要4个字节,而使用Varchar就需要9个字节(这还不包括Varchar还需要占用4个字节记录长度)。    4.如果没有必要,不要使用Nvarchar,Nchar等以“字”为单位存储的数据类型。这类数据类型相比varchar或是char需要更多的存储空间。    5.关于Char和VarCha

8、r的选择    这类比较其实有一些了。如果懒得记忆,大多数情况下使用Varchar都是正确的选择。我们知道Varchar所占用的存储空间由其存储的内容决定,而Char所占用的存储空间由定义其的长度决定。因此Char的长度无论存储多少数据,都会占用其定义的空间。所以如果列存储着像邮政编码这样

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。