之间有什么区别:
CONCAT_WS('', column)=''
AND
column is null OR column=0 *(and optionally 'OR column="" ')*
其中一个更好/更快......?
SELECT my_fields FROM my_table
WHERE my_terms_clause='anything' AND CONCAT_WS( '', nb_check ) = ''
OR
SELECT my_fields FROM my_table
WHERE my_terms_clause='anything' AND (p.nb_check is null OR p.nb_check = 0)
我通常使用"列为空或列= 0",但我只想要"专家的提示"。
答案 0 :(得分:1)
如果列保持值0,则具有空字符串作为分隔符的concat_ws()将返回“0”,而不是“”,因此2个表达式不相等。如果你需要检查null或0,那么最好使用那个实际检查这个条件的版本。
答案 1 :(得分:1)
你绝对应该使用:
where col is null or column = 0
首先,代码的意图更加清晰。其次,函数调用阻止优化器使用索引。说实话,or
也使优化器难以使用索引。
编写查询的最有效方法可能是使用union all
:
SELECT my_fields
FROM my_table p
WHERE my_terms_clause = 'anything' AND p.nb_check is null
UNION ALL
SELECT my_fields
FROM my_table p
WHERE my_terms_clause = 'anything' AND p.nb_check = 0;
这可以利用my_table(my_terms_clause, nb_check)
上的索引。