にnullを追加し、私は、このデータを持っている:SQL Serverは、where句
+-----+-------+-------+-------+-------+
| id | val1 | val2 | val3 | val4 |
+-----+-------+-------+-------+-------+
| 1 | 5 | null | 0 | 3 |
+-----+-------+-------+-------+-------+
私はval1-4の追加数が一定のしきい値を超えているすべての行を選択します。ただし、列はNULL可能です。だから、これは動作しません:私は使用することができ
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