mySQLのEXPLAINについて調べた

mysql, インフラ, データベース, 開発DB, mysql

広告

これまでのmysql についての参考

mysqlの初期設定
mysqlユーザ追加
mysqlの仕組み
mysqlの仕組み(1)

MySQLでのクエリチューニング

インデックスとは

辞書の索引のような物を作成することによって、データ参照の高速化ができます。大量のレコードが入っているテーブルの中から任意のレコードを取得するために、検索を行います。検索でレコードを最初から目的のものが見つかるまで、検索を行っていると時間がかかってしまいます。INDEXの作成をテーブルを作る段階でやっておくと、データテーブルとは別に検索用に最適化された状態でデータが保存される。インデックスにより、目的のレコードの取得の範囲を全件の中から検索する必要がなくなり、高速で取り出すことができるようになります。

インデックスのメリット

where句やorder by,group byでのレコードの絞り込み速度が早くなる。
select だけではなく更新などの処理での該当するレコードを取得するまでに時間の短縮化

インデックスのデメリット

INSERT,UPDATE,DELETEのコストが増える。
インサート文において、レコードの挿入時にインデックスの挿入の動作も増えることにより遅くなる。デリート文において、レコードの削除時にテーブル全体のインデックスの更新が入ってくるので、遅くなる。

インデックスが適切に効いているのか

インデックスが適切に効いているのかを確認するために、EXPLAINを使います。MySQLのチューニングの際に最も大切なことが、スキーマの最適化になります。なので、新しいテーブルを作成するときは、慎重に行いたいものです。基本的には、where句などで、頻繁に検索をかけるカラムでインデックスを張っていくようになります。実際にクエリを作った時に、インデックスが聞いているかを確認する必要があります。ここで、EXPLAIN SELECT …が登場します。
クエリの最適化をするために、出力結果が同じになるように新しいクエリを作ってEXPLAIN  を付けて確認をするようになります。

EXPLAINで表示されるもの

  • Id
  • select_type
  • table
  • type
  • possible_key
  • key
  • key_len
  • lef
  • rows
  • Extra

まとめ

mysqlではインデックスを使うことによりデータの取得や絞り込み速度が高速化される。インデックスが適切に効いているかどうかを確認するためにExplainというものがあることがわかった。次回は、Explainで表示されるカラムの中身の詳細について調べて具体時にどのような状態になっていればインデックスが使われていてどのような状況だとインデックスが使われていなくて、良くないのかとかをまとめていきたいと思います。

広告