ここ2か月ぐらいはSQLの本でがりがり勉強してきましたね。当然復習も必要かと思いますが、だいぶいろんなことを覚えたなあという気がします。
一番勉強になった本はもちろん「達人に学ぶ SQL徹底指南書」とこのサイト「http://mickindex.sakura.ne.jp/database/db_support_sinan.html」です。
かなり高度なことを書いていると思いますが、平易な例題やなんといってもサイトに練習用のSQLがしっかり乗っているため非常に勉強しやすいです。
内容的にはおそらく3割ぐらいしかやっていないでしょう。まだまだ入り口に立ったばかりかと思いますが、これをベースにいろいろなSQLを書いていきたいと思います。
ちょっとほかにも勉強しないといけないこともあるので一旦SQLはおいておこうと思います。
さて、最後の本日はSQLのチューニングについてです。
こちら箇条書きにていろいろ書いてみたいと思います。
サブクエリを引数にとる場合INよりもEXISTSをとる。INよりも結合をとる
- 結合キーにインデックスが張られていれば、テーブルの実表は見に行かず、インデックスを参照するのみで済む
- EXISTSは一行でも条件に合致する行を見つけたらそこで検索をうちきるので、INのように全表検索の必要がない。NOT EXISTSも同様
ソートの回避
- ALLオプションをうまく使う
- DISTINCTをEXISTSで代用
- MAX/MINでインデックスを使う
- WHERE句で書けるものはHAVINGに書かない
- GROUP BY ORDER BYでインデックスを使う
インデックスが有効活用されないとき
- 索引列に加工を行う(計算式など)
- IS NULLを使用
- 否定形の使用
- ORの使用
- 後方一致、中間一致のLIKE述語
- 暗黙の型変換
中間テーブルを減らせ
- HAVING句の活用
- IN述語で複数キーを利用する場合は一か所で
- 集合よりも結合を先に
- ビューを使いすぎない