我有这样的数据:SQL Server添加在空where子句
+-----+-------+-------+-------+-------+
| id | val1 | val2 | val3 | val4 |
+-----+-------+-------+-------+-------+
| 1 | 5 | null | 0 | 3 |
+-----+-------+-------+-------+-------+
我想选择所有行val1-4的增加数超过一定阈值。但是列可以为空。所以这是行不通的:
SELECT *
FROM data
WHERE val1 + val2 + val3 + val4 > 6
我可以使用:
SELECT *
FROM data
WHERE ISNULL(val1, 0) + ISNULL(val2, 0) + ISNULL(val3, 0) + ISNULL(val4, 0) > 6
不过,我看到,在一个WHERE
条款使用ISNULL
当SQL Server无法使用索引。
这是真的吗?我还有什么其他选择?
问题是什么?你使用了'ISNULL'并且需要很长时间?此外,所有这些列索引? – sagi
无论如何SQL Server将无法使用索引搜索,因为您正在对列执行添加。这是一个完整的扫描,如果所有值都被编入索引,可能是索引,但它不是索引查找。 – dasblinkenlight
在我这边是坏思想过程..当然,指数无论如何也无济于事。所以我想ISNULL或者COALESCE不会损害整体性能,而不是使用它。 – Chris