【问题标题】:Is there a performance difference between `=` and `<=>`?`=` 和 `<=>` 之间有性能差异吗?
【发布时间】:2011-05-10 20:58:29
【问题描述】:

我最近将所有 where 条件更改为使用 &lt;=&gt; 而不是 =,因为我需要检查空值。是否存在任何性能问题?

【问题讨论】:

    标签: mysql performance optimization


    【解决方案1】:

    这里没有真正的性能影响,这是一个自己验证的测试

    mysql> SELECT BENCHMARK(1000000, (SELECT SQL_NO_CACHE userId FROM Activity WHERE userId<=>42459204 LIMIT 1));
    

    确保您需要使用

    NULL 安全相等。该运算符 执行相等比较,例如 = 运算符,但返回 1 而不是 如果两个操作数都为 NULL,则为 NULL, 如果有一个操作数,则为 0 而不是 NULL 为 NULL。

    如果你只需要检查右值做

    col=CONST AND CONST 不为空

    或 t1.col=t2.col

    【讨论】:

    • 用于我的数据库抽象层。您可以传入一个列值对的字典,它应该检查该列是否等于该值。 Null 是一个有效值。
    【解决方案2】:

    &lt;=&gt; 基本上是包含OR (Val1 IS NULL AND Val2 IS NULL)IS NOT DISTINCT FROM 的快捷方式

    一个额外的操作,但差异应该可以忽略不计除非你是SELECTing要比较的数据,否则第一个SELECT返回@987654326 @ 不需要执行第二个 SELECT,因为标准相等运算符 = 将始终产生 false。

    正如@Dathan 所说,请确保这确实是您打算这样做的时候。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2010-10-25
      • 2014-02-05
      • 2018-09-09
      • 1970-01-01
      • 2011-02-04
      相关资源
      最近更新 更多