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

SQL 更新系に関して

SQL実践入門、残り2章になりましたが、いやーむずいっす。 今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。 ですが、UPDATE文 …

no image

データベースのインデックスについて

今回はデータベースのインデックスに関して。 検索条件を早くする場合、何よりも速度が速くなるのはインデックスを張ることでしょう。 インデックスを張ることは単語を索引順に並べることですので、劇的に速度が向 …

no image

SQL基礎 条件式はunionよりもcaseで

複雑な条件式があったときにcase式を使うことでパフォーマンスを向上させることができます。 ※一般にunionを使うよりも高速なことが多い。 例1 ある条件により別の列を使いたいとき、 [crayon …

no image

MariaDBインストール

CentOS7からはyumでmysqlをインストールするとMariaDBがディフォルトになるようです。 せっかくなので、これを機にMariaDBを使ってみました。といってもMySQLとほとんど一緒でし …

no image

アンチパターン トランザクションスコープ+大量データのリアルタイム集計+接続が詰まる

本日は主にインフラの設計的なことに関して。 Contents1 トランザクションスコープの設定1.1 デメリット1.2 対策2 大量データのリアルタイム集計2.1 デメリット2.2 対策3 詰まると接 …