Mysql:CONCAT_WS('',col)vs(col为null或col = 0)

时间:2015-11-02 13:04:14

标签: mysql null

之间有什么区别:

  • 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",但我只想要"专家的提示"。

2 个答案:

答案 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)上的索引。