【问题标题】:SQL Server 2008: tinyint vs bitSQL Server 2008:tinyint 与位
【发布时间】:2022-05-03 04:34:26
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

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

    我会同意的。

    【讨论】:

    • 这是我正在寻找的信息。您是否知道 SQL Server 2008 中的任何其他功能可以进一步消除使用位时的性能问题?
    • 不,不是我的头顶。
    【解决方案2】:

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

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

    bit (Transact-SQL)

    SQL Server 2005 也是如此

    【讨论】:

      【解决方案3】:

      bit 通常用于布尔值。如果您在数据库中存储的所有内容都是布尔值,那么我认为 tinyint 将是矫枉过正。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多