skillup

技術ブログ

Database

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

投稿日:2016年12月5日 更新日:

ここ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述語で複数キーを利用する場合は一か所で
  • 集合よりも結合を先に
  • ビューを使いすぎない

 

-Database
-,

執筆者:


comment

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

関連記事

no image

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

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

no image

MySQLのSETとFIND_IN_SETについて

MySQLの方ですが、単純な文字列や、数字、日付の他に配列に近いSET型、また5.7以降ではJSONなどを入れることができます。 Contents1 SET型2 FIND_IN_SET SET型 いわ …

no image

自己結合のイメージ

前回に引き続き結合について考えます。 例えば下記のようなテーブルがあり、重複行を削除するとします。 1 りんご 50 2 みかん 100 3 みかん 100 4 みかん 100 5 バナナ 80 この …

no image

JPAでのデータベースとの同期

このブログでも何回か書いてきたJPAですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。 何回か書いてますが、JP …

no image

JPAでの多対多のリレーション

以前、このエントリーでJPAのリレーションについて説明しました。 今回は多対多について説明します。 Contents1 テーブル構成2 ソース2.1 CDのエンティティ2.2 Artistのエンティテ …