我需要在工作中向现有表添加一个新列,我想知道是否将其创建为tinyint或bit数据类型。我们公司最近从SQL Server 2000升级到2008,而IIRC我的老板说在尝试使用位时SQL Server 2000中存在问题。我认为他说他们与索引和/或分组有关 - 我忘了。
在tinyint和bit之间进行判断时,如果我计划存储的唯一值为true / 1或false / 0,我应该考虑哪些因素? SQL Server 2000中是否有任何我可以/应该忘记的规则?
答案 0 :(得分:4)
2000年的问题有点不能成为指数的一部分。这是合乎逻辑的,因为有点只有两个状态。拥有索引是一个非常糟糕的领域。在2005年,您可以创建覆盖索引,这允许您指定要与索引一起存储的额外数据。这样可以避免书签查找。
我会选择这一点。
答案 1 :(得分:2)
如果表中只有一个位列,则仍需要一个字节来存储它。
SQL Server数据库引擎优化了位列的存储。如果表中有8位或更少位列,则列存储为1个字节。如果有9到16位列,则列存储为2个字节,依此类推。
SQL Server 2005也是这样做的
答案 2 :(得分:1)
位通常用于布尔值。如果您在db中存储的所有内容都是布尔值,那么我认为tinyint会有点过分。