我有這樣的數據: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