mysql做ifnull(...)阻碍索引使用?

时间:2017-09-29 09:06:17

标签: mysql

我有一个包含整数值的表,我需要按列总和进行查询:

    id, A, B, C
    1, 21, 32, null
    2, 9, 0, 124
    3, null, null, 6

SELECT * FROM tbl WHERE B+C > 50

这不起作用,因为不允许添加null。当前实现是将所有空值设置为0,并为每个列添加一个单独的列,以表示0实际上是否为null:

id, A, B, C, A_null, B_null, C_null
1, 21, 32, 0, false, false, true
2, 9, 0, 124, false, false, false
3, 0, 0, 6, true, true, false

我不认为这很优雅,而是想使用ifnull功能:

SELECT * FROM tbl WHERE ifnull(B,0)+ifnull(C,0) > 50

这是否会带来很大的性能损失或其他缺点?

该表有数百万行。

1 个答案:

答案 0 :(得分:0)

您可以随时使用

    isnull(column_name ,0)

这将在空值中插入0,然后它将允许您对它们进行求和。

ifnull和isnull之间的区别 - ifnull有两个参数;如果值为null,则为1;如果不是,则为1。

isnull只是简单地将一个值插入到所有空值中,我认为这个问题会更加简单。