SQL Server 2008:tinyint vs bit

时间:2009-09-17 18:15:22

标签: sql-server-2008

我需要在工作中向现有表添加一个新列,我想知道是否将其创建为tinyint或bit数据类型。我们公司最近从SQL Server 2000升级到2008,而IIRC我的老板说在尝试使用位时SQL Server 2000中存在问题。我认为他说他们与索引和/或分组有关 - 我忘了。

在tinyint和bit之间进行判断时,如果我计划存储的唯一值为true / 1或false / 0,我应该考虑哪些因素? SQL Server 2000中是否有任何我可以/应该忘记的规则?

3 个答案:

答案 0 :(得分:4)

2000年的问题有点不能成为指数的一部分。这是合乎逻辑的,因为有点只有两个状态。拥有索引是一个非常糟糕的领域。在2005年,您可以创建覆盖索引,这允许您指定要与索引一起存储的额外数据。这样可以避免书签查找。

我会选择这一点。

答案 1 :(得分:2)

如果表中只有一个位列,则仍需要一个字节来存储它。

SQL Server数据库引擎优化了位列的存储。如果表中有8位或更少位列,则列存储为1个字节。如果有9到16位列,则列存储为2个字节,依此类推。

bit (Transact-SQL)

SQL Server 2005也是这样做的

答案 2 :(得分:1)

位通常用于布尔值。如果您在db中存储的所有内容都是布尔值,那么我认为tinyint会有点过分。