私は、整数値を持つテーブルを持っていると私は、列の合計で照会する必要があります。mysqlはifnull(...)インデックスの使用を妨害しますか?
id, A, B, C
1, 21, 32, null
2, 9, 0, 124
3, null, null, 6
SELECT * FROM tbl WHERE B+C > 50
ヌルと追加が許可されていないので、これは動作しません。
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
私は、これは非常に洗練されてないと思いますし、使用したいと思い:現在の実装では、すべて0にNULLを設定し、0が実際にnullを意味している場合の状態に列ごとに別の列を追加することですifnull関数の代わりに:
SELECT * FROM tbl WHERE ifnull(B,0)+ifnull(C,0) > 50
これには大きなパフォーマンス上のペナルティまたは他の欠点がありますか?
テーブルには、数百万行があります。
とにかく 'where b + c> 50'を検索するためにインデックスを使うことはできません(より正確には、インデックスをスキャンするために使うこともできますし、カバーするインデックスであれば使用するかもしれませんが、その条件のすべての行)。あなたの計算に 'ifnull'(実際には 'coalesce()')を使っても問題ないでしょう。 nullの場合は、絶対に列を追加しないでください! – Solarflare