2014年2月17日月曜日

is nullは重い

テーブルAテーブルBがあって、2つを結合し、AにデータがあってBにデータがないものを抽出するのに、B.hoge is null って感じでis nullを使ってました。

最初はこれで問題なかったものの、データ量が多くなるにつれてパフォーマンスが悪くなってきており、調べてみたらこの is null が原因でした。

is nullを使うと、強制的に全表走査になっちゃうそうです。
http://memo.sonorilo.net/post/187525676/sql-11

今回は仕様の都合上、is nullは外せませんでした。
代わりに絞り込みを少し強めにして、パフォーマンスを改善しました。
平たく言うとその場しのぎです。

実装後に変更するのは難しいので、設計段階でできるだけnullを使わないよう、心がけないといけませんね。

0 件のコメント:

コメントを投稿