检查 field = '' 与 field IS NULL 是否有任何速度差异?
Is there any speed difference in checking for field = '' vs field IS NULL?
我有一个问题:
SELECT * FROM `apps` WHERE dev_name = '' ORDER BY RAND() LIMIT 10;
现在我正在检查空白 dev_name
但如果我将默认值设置为 NULL
并在 SELECT 中使用 NULL
会更快吗相反?
总的来说,我会说这是一个微优化,最好将您的查询和 table 结构建模为语义正确的东西。
由于这是一个一般性问题,请尝试阅读有关 SO 的其他问题并自行决定。很难说您的特定设置是否会通过任何选项获得性能胜利。如果您想确定,请尝试为自己做一个基准,这样做也很有趣:)
速度不是选择一个与另一个的原因。在您的有限示例中,x = ''
和 x IS NULL
可能会执行相同的速度。
NULL
与''
(或0
)相比,应该考虑的是其他形式的测试,以及该列的含义。
比如有"no fees",fee
列应该是0
还是NULL
? NULL
似乎暗示着 "no fees"。但是,WHERE fee < 100
没有 WHERE fee IS NULL OR fee < 100
笨拙,所以我会投票给 0
。
COUNT(dev_name)
会算作 ''
,但不会算作 NULL
。这可能是决定因素。
等等
我有一个问题:
SELECT * FROM `apps` WHERE dev_name = '' ORDER BY RAND() LIMIT 10;
现在我正在检查空白 dev_name
但如果我将默认值设置为 NULL
并在 SELECT 中使用 NULL
会更快吗相反?
总的来说,我会说这是一个微优化,最好将您的查询和 table 结构建模为语义正确的东西。
由于这是一个一般性问题,请尝试阅读有关 SO 的其他问题并自行决定。很难说您的特定设置是否会通过任何选项获得性能胜利。如果您想确定,请尝试为自己做一个基准,这样做也很有趣:)
速度不是选择一个与另一个的原因。在您的有限示例中,x = ''
和 x IS NULL
可能会执行相同的速度。
NULL
与''
(或0
)相比,应该考虑的是其他形式的测试,以及该列的含义。
比如有"no fees",fee
列应该是0
还是NULL
? NULL
似乎暗示着 "no fees"。但是,WHERE fee < 100
没有 WHERE fee IS NULL OR fee < 100
笨拙,所以我会投票给 0
。
COUNT(dev_name)
会算作 ''
,但不会算作 NULL
。这可能是决定因素。
等等