做什么之间有什么区别:
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
答案 0 :(得分:1)
如果我理解你的问题,你会问两种情况的相对利益/问题:
鉴于两者都在数据表中,我无法想到为什么一个人比另一个人表现更好。我认为第一个更清楚查询正在做什么,所以这是我更喜欢的版本。但从表现的角度来看,它们应该是一样的。
其他人提到 - 而且我确定你知道 - NULL和0是不同的野兽。它们在连接和其他元素的优化中也可以表现不同。但是,对于简单的过滤,我希望它们具有相同的性能。
嗯,有一种技术。与" 0"的比较可能内置在CPU中。与NULL的比较可能是一个需要像掩码,移位和比较之类的操作,这可能需要更长的时间。但是,与您从磁盘读取数据的事实相比,这种性能差异可以忽略不计。
答案 1 :(得分:0)
与NULL
和zero
相比是两回事。 zero
是一个值(已知值),而NULL
是 UNKNOWN 。 zero
具体表示该值设置为zero
; null
表示未设置该值,或者设置为null。
答案 2 :(得分:-1)
据我所知,与NULL
比较与0比较快,所以你应该选择基于:
在这种情况下,paying
列NULL
能够更好。
您还应该查看以下问题:
NULL in MySQL (Performance & Storage)
MySQL: NULL vs “”
答案 3 :(得分:-1)
使用这些查询会得到完全不同的结果,这不仅仅是性能问题。
假设您有各种各样的用户。有些具有“支付”列的非零值,有些具有0,有些没有任何值。最后一种情况是“null”或多或少代表什么。
至于表现,你有“支付”栏的索引吗?如果表中只有几百行,这可能无关紧要。如果你有成千上万的行,你基本上是告诉查询迭代表的每一行,除非你有一些索引。无论您是在搜索“pay = 0”还是“pay is null”,都是如此。
但是,再次强调,这两个查询会给你完全不同的结果。