[MySQL]クエリ判断の仕組み

mysql, データベースmysql


Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105

これまで、インデックスやsql文でインデックスが適切に使われているかを確認するためのEXPLAINについてなどを調べてきましたが、インデックスを使うべきかの判断はどこでどのように行われているのかが気になりましたので調べてみました。

以前のMySQL関連の記事についてはこちら

mysqlの初期設定
mysqlユーザ追加
mysqlの仕組み
mysqlの仕組み(1)
mySQLのEXPLAINについて調べた
[SQL基本]テーブル結合の使い方
[mySQL]CASE構文で条件分岐をSQL文で解決

クエリ評価エンジン

実行されたSQL文を最初に受け取る機能の事で、データベースから取得する前に行われ、どのようにアクセスするかを決める。

クエリの処理の流れ

  • パーサ
  • オプティマイザ
  • プラン評価

パーサとは

構文解析そして使わているパーサは、MySQLに届いたクエリを文法上の問題がないかどうかを判断、アクセスするテーブルが存在するかどうかなどのチェックを行いSQL文を機械語に変換します。

オプティマイザとは

文法チェックやテーブルの存在、カラムの存在などをパーサでチェックしたあとに、オプティマイザに送られます。オプティマイザでは、アクセス経路、インデックスの有無、データの分散や偏りなどの様々なパラメータから最適な実行結果とされる候補を作り、それらのコストから最も最適なものを提示します。

プラン評価

オプティマイザによって作られた複数の実行計画を元に、最適な実行計画を選択する処理を行う部分がプラン評価に当たります。

まとめ

オプティマイザトレースによって、実際にオプティマイザがどのような実行計画を選択するのかを見ることができる機能があるそうですが、まだ確認していないのでこちらをみてどのように決められているのかの過程を確認したいと思います。