skillup

技術ブログ

Database

SQLのチューニングに関して

投稿日:

ここ2か月ぐらいはSQLの本でがりがり勉強してきましたね。当然復習も必要かと思いますが、だいぶいろんなことを覚えたなあという気がします。

一番勉強になった本はもちろん「達人に学ぶ SQL徹底指南書」とこのサイト「http://www.geocities.jp/mickindex/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述語で複数キーを利用する場合は一か所で
  • 集合よりも結合を先に
  • ビューを使いすぎない

 

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

サブクエリ 応用編

本日も引き続きサブクエリです。 前回とちょっと近いですが、下記のような歯抜けのテーブル(sales2)があるとします。 year | sale ——+—&#8212 …

no image

SQL問題

今までやったSQL問題などのまとめ。定期的にやる予定です・・ 自分用なのでテーブルデータとかあったりなかったりいい加減です(汗) SQLドリル 問題1 nameとageで構成されたテーブルがあるとして …

no image

mysqlデータのCSV出力

ガチンコ塾のブログでもかいたのですが、行動力が大切だなーと思う今日この頃。 社長が熟練のJavaエンジニアで基本的に聞けば、基本的に解決することが多いのですが、外部の勉強会などにも出て情報収集の必要性 …

no image

サロゲートキーに関して

テーブル設計に関してのメモ。 テーブルを作る時にid int not null auto_increment primary keyを自動的に作ることが多いと思いますが、サロゲートキーといい、グレーノ …

no image

論理設計のグレーノウハウ サロゲートキー

前回まではアンチパターンやバッドノウハウについて学習してきましたが、今回はグレーノウハウについて特集します。 グレーノウハウとは読んで字のごとくホワイトともブラックとも言えないという手法ですね。 つま …