【发布时间】:2008-11-19 20:06:29
【问题描述】:
在 SqlServer 2005 中设计查找表(枚举)时,如果您知道条目数永远不会很高,是否应该使用 tinyint 而不是 int?我最关心的是性能,尤其是索引的效率。
假设您有这些代表性表格:
Person
------
PersonId int (PK)
PersonTypeId tinyint (FK to PersonTypes)
和
PersonTypes
-----------
PersonTypeId tinyint
PersonTypeName varchar(50)
显而易见的因素是数据大小和编码麻烦。当我们在 person 表中达到 1 亿行时,与 int 相比,使用 tinyint 存储的字节数减少了 3 亿字节,再加上索引占用的空间。不是大量的数据,但如果将设计决策应用于数十个大表,则意义重大。当然,编码麻烦来自 ASP.NET C#/VB 代码中的所有这些转换问题。
如果我们抛开这两个问题,还有什么可以发挥作用?由于索引页的大小减小,查询会更有效吗?或者是否有某种填充会抵消好处?还有其他问题吗?
我个人一直只使用 int,但我正在考虑使用 tinyint 来对一些大型表进行重新设计/迁移,所以我很想得到一些建议。
[编辑]
在对此进行试验后,我预料到的编码麻烦被证明不是问题。从 int 更改为 tinyint 根本没有导致任何转换问题。
【问题讨论】:
标签: sql sql-server database-design