两个相似的SQL查询之间的性能差异

时间:2012-07-29 23:42:00

标签: mysql sql

做什么之间有什么区别:

SELECT * FROM table WHERE column IS NULL

或 -

SELECT * FROM table WHERE column = 0

正在使IS NULL明显比等于常数差吗?

用例出现在我的地方:

SELECT * FROM users WHERE paying IS NULL

(或添加其他栏目)

SELECT * FROM users WHERE is_paying = 0

4 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你会问两种情况的相对利益/问题:

  • 其中is_paying = 0
  • 付款为空

鉴于两者都在数据表中,我无法想到为什么一个人比另一个人表现更好。我认为第一个更清楚查询正在做什么,所以这是我更喜欢的版本。但从表现的角度来看,它们应该是一样的。

其他人提到 - 而且我确定你知道 - NULL和0是不同的野兽。它们在连接和其他元素的优化中也可以表现不同。但是,对于简单的过滤,我希望它们具有相同的性能。

嗯,有一种技术。与" 0"的比较可能内置在CPU中。与NULL的比较可能是一个需要像掩码,移位和比较之类的操作,这可能需要更长的时间。但是,与您从磁盘读取数据的事实相比,这种性能差异可以忽略不计。

答案 1 :(得分:0)

NULLzero相比是两回事。 zero是一个值(已知值),而NULL UNKNOWN zero具体表示该值设置为zero; null表示未设置该值,或者设置为null。

答案 2 :(得分:-1)

据我所知,与NULL比较与0比较快,所以你应该选择基于:

  1. 简单 - 使用使代码更简单的选项
  2. 最小尺寸 - 使用使您的桌子更小的选项
  3. 在这种情况下,payingNULL能够更好。

    您还应该查看以下问题:
    NULL in MySQL (Performance & Storage)
    MySQL: NULL vs “”

答案 3 :(得分:-1)

使用这些查询会得到完全不同的结果,这不仅仅是性能问题。

假设您有各种各样的用户。有些具有“支付”列的非零值,有些具有0,有些没有任何值。最后一种情况是“null”或多或少代表什么。

至于表现,你有“支付”栏的索引吗?如果表中只有几百行,这可能无关紧要。如果你有成千上万的行,你基本上是告诉查询迭代表的每一行,除非你有一些索引。无论您是在搜索“pay = 0”还是“pay is null”,都是如此。

但是,再次强调,这两个查询会给你完全不同的结果。