【问题标题】:SQL: What is better a Bit or a char(1)SQL:Bit 和 char 哪个更好(1)
【发布时间】:2011-07-03 15:10:54
【问题描述】:

在检索 bit 或 char(1) 方面是否有任何性能差异?

只是为了好奇=]

更新:假设我使用的是 SQL Server 2008!

【问题讨论】:

  • 这取决于什么 RDBMS。并非每个人都以相同的方式实现位。比如 MySQL 的 bit 数据类型是 bogus。
  • 对于 SQL Server,请参阅:Bit vs. Char(1) in SQL Server
  • @BoltClock - 这绝对应该详细说明并给出答案。
  • @Justin Niessner:Adam 已经做到了 :)
  • @BoltClock - 详细信息。我第一次看到你的评论。哈哈。

标签: sql sql-server performance sql-server-2008


【解决方案1】:

用一点。始终使用尽可能小的数据类型。一旦您开始获得大表,这一点至关重要。

【讨论】:

    【解决方案2】:

    a bit 和 char(1) 都需要 1 个字节来存储,假设表中只有 1 位列,SQL Server 将在 1 个字节中存储 tp 8 位列。我认为性能上没有区别。

    需要注意的一点是,您不能对位列进行求和

    CREATE TABLE #test( a BIT)
    
    INSERT #test VALUES (1)
    INSERT #test VALUES (1)
    
    SELECT sum(a) FROM #test
    

    消息 8117,第 16 层,状态 1,第 1 行
    操作数数据类型位对 sum 运算符无效。

    你必须先转换它

    SELECT sum(CONVERT(INT,a)) FROM #test
    

    【讨论】:

    • 您不能对 char(1) 列进行求和,CREATE TABLE #test( a CHAR(1)) INSERT #test VALUES (1) INSERT #test VALUES (1) SELECT sum(a) FROM #test Msg 8117,级别 16,状态 1,行 1 操作数数据类型 char 对求和运算符无效。
    【解决方案3】:

    对于 SQL Server:BIT 类型的最多 8 列可以存储在一个字节内,而CHAR(1) 类型的每一列将占用一个字节。

    另一方面:BIT 列可以有两个值(0 = 假,1 = 真)或根本没有值(NULL) - 而CHAR(1) 可以有任何字符值(更多可能性)

    真的,归结为:

    • 您真的需要一个真/假(是/否)字段吗?如果是这样:使用BIT
    • 您是否需要不止两个可能值的东西 - 使用CHAR(1)

    从性能的角度来看,我认为这不会产生任何显着差异 - 除非您有数万列。那么当然,使用BIT 可以在单个字节中存储多达 8 列将是有益的。但同样:对于您的“正常”数据库案例,您有几个,十几个这样的列,它真的没有太大的区别。选择适合您需要的列类型 - 不要过分担心性能.....

    【讨论】:

    • 这不是问题的关注点......我想知道性能
    • @Renanlf:前两句回答了。
    • @renanlf:尝试添加更多性能内容 - 但老实说:这是一个很小的微优化,我认为其他因素更重要 - 选择 匹配的列 你需要什么!
    • 是的,我知道这是一个很小的优化和bla bla bal...这就是为什么它只是为了好奇=]
    • 挖掘这篇旧帖子,即使进行了微优化 - 审查和筛选新列添加以提高性能总是好的。即使有一点帮助。
    【解决方案4】:

    正如亚当所说,这取决于正确实现数据类型的数据库,但理论上以下成立:

    位:

    将存储 1 或 0 或 null。只需要一个位来存储值(根据定义!)。通常用于真假,很多编程语言会自动将位解释为真假字段。

    字符[1]:

    一个 char 占用 8 位或一个字节,因此存储时它的大小是 8 倍。您可以在其中存储(几乎)任何角色。可能会被编程语言解释为字符串。我认为 Char[1] 总是会占用整个字节,即使是空的,除非你使用 varchar 或 nvarchar。

    【讨论】:

      【解决方案5】:

      它依赖于实现。一种 DBMS 可能具有相同的性能,而另一种可能有差异。

      【讨论】:

        猜你喜欢
        • 2011-01-02
        • 1970-01-01
        • 2016-09-18
        • 2019-02-01
        • 2010-09-16
        • 2017-03-29
        • 2019-09-20
        • 2010-11-23
        • 1970-01-01
        相关资源
        最近更新 更多