テーブル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 件のコメント:
コメントを投稿