当前位置:  开发笔记 > 编程语言 > 正文

为SqlServer查找表使用tinyint而不是int是否值得?

如何解决《为SqlServer查找表使用tinyint而不是int是否值得?》经验,为你挑选了1个好方法。

在SqlServer 2005中设计查找表(枚举)时,如果你知道条目的数量永远不会很高,你应该使用tinyint而不是int吗?我最关心的是性能,特别是索引的效率.

假设您有这些代表性表格:

Person
------
PersonId int  (PK)
PersonTypeId tinyint  (FK to PersonTypes)

PersonTypes
-----------
PersonTypeId tinyint
PersonTypeName varchar(50)

显而易见的因素是数据大小和编码麻烦.当我们在person表中获得1亿行时,我们使用tinyint而不是int存储3亿个字节,加上索引占用的空间.不是大量的数据,但如果将设计决策应用于数十个大表,则意义重大.当然,编码麻烦来自ASP.NET C#/ VB代码中的所有那些转换问题.

如果我们搁置这两个问题,还有什么可以发挥作用?由于索引页面的大小减小,查询会更有效吗?或者是否存在某种填充,只会否定其好处?还有其他陷阱吗?

我一直只是个人使用,但我正在考虑在一些巨大的桌子上进行重新设计/迁移工作的tinyint,所以我很想得到一些建议.

[编辑]

在尝试了这个之后,我预期的编码麻烦结果证明是无问题的.从int更改为tinyint并没有导致任何铸造问题.



1> Charles Bret..:

表(或索引节点条目)越窄,单个IO页面上的记录(或索引节点)就越多,并且任何查询都需要更少的物理(和逻辑)读取IO操作.此外,单个页面上的索引节点越多,索引中的级别就越少,从根级别到叶级别,如果通过使表格更窄,则通过阈值,其中索引可以小一级,可以对穿孔产生戏剧性的影响.

如果通过切换到TinyInt,您将表从200字节宽更改为197字节宽,它可能不会有任何区别......但如果您将其从20字节更改为14,(比如说你有2个整数),然后它可能是戏剧性的......

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有