【问题标题】:TSQL BIT =0 and <>1SQL 位 =0 和 <>1
【发布时间】:2018-07-30 11:21:32
【问题描述】:

如果我写有什么不同

select * from table where bit_field = 0

select * from table where bit_field <> 1

?

更新: 我有一份报告说最好使用“bit_field = 0”版本,因为如果您在字段上有一些索引,请使用第二个选项,“Seek Predicates”有一些问题......它有两个搜索谓词一个 1 ... 或其他东西。 我没有任何例子可以展示。 :( 更改为 = 后,排他锁 (X) 和意向排他锁 (IX) 减少 对此有什么想法吗?

【问题讨论】:

  • 如果列的类型是bit,那么没有区别
  • BIT 可以是 1、0 或 NULL & 鉴于所有相等运算符都排除了 NULL,所以没有区别。
  • 逻辑上这些没有区别。实际上是there might be.
  • 第一个比较清楚。
  • 如果性能更好,那么查询优化器设计者可能已经在内部为您完成了

标签: sql sql-server tsql bit


【解决方案1】:

这两个查询之间应该没有区别。如果不存在NULL 值,那么显然任何为零的值也与不为一相同。如果存在NULLs,它不会改变任何东西,因为任何一个查询都不会返回NULL 记录。

请看下面的演示。

Demo

【讨论】:

    【解决方案2】:

    应该没有区别,因为bit只取0和1的值。

    两者都将排除 NULL 值。

    【讨论】:

    • 整数数据类型,可以取值 1、0 或 NULL。
    • @TaPaKaHUA Both will exclude NULL values
    • '只取 0 和 1 的值。'
    • 我想知道&lt;&gt;是否和not(=)一样,因为如果是,它应该会导致same issue
    • => @a > Value AND @a
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2010-12-26
    • 1970-01-01
    • 2018-11-28
    • 2016-09-04
    相关资源
    最近更新 更多