MySQLの開発者とかは絶対そのような事を繰り返して開発してると思うので、何か方法はあると思うのですが、、、(MySQLのソースをデバッガで動かして処理を追うとかになるのでしょうか、そんな感じでも良いので、そういうのやる方法を教えてください)
オラクルでもSQLサーバーでも、SQLがどのように実行されるかを調べるのに、「実行計画」というキーワードが役立ちます。MySQLでも同じで、Explainという命令が使えます。
http://dev.mysql.com/doc/refman/5.1/ja/explain.html
これにより、SQLの実行でどのような順番でテーブルが結合されるのかどのようにIndexが使われているか、といったような情報が入手できます。
この結果から、どのようなIndexを作ればいいか、テーブルの結合順番をどうすれば良いか、といったことが分かり、SQLのパフォーマンスを向上できます。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 2.9.2 典型的な configure オプション
さすがにやったことがないのでマニュアルからの参照になりますが、
MySQL 5.1.12 では、--with-debug を使用して MySQL のデバッグのサポートを可能にしサーバの起動時に --debug="d,parser_debug" オプションを使用できるようにします。これにより SQL ステートメントの処理に使用される Bison parser に parser トレースをサーバの標準エラー出力にダンプさせます。一般的には、この出力はエラーログに記録されます。
これで可能に思えます。
まぁ最悪、gdb 等を使用して、やる方法もあるようですが。
MySQL :: MySQL 5.1 Reference Manual :: 22.5.1.4 Debugging mysqld under gdb
MySQLの開発に参加したいというのでなければ、1の方のおっしゃる通り、おそらく実行計画の事ですね。
これは、どのようにテーブルを結合し、どのインデックスが使えるかなどをMySQLが判断した様子を表示出来ます。
拙作ですが、SQL開発環境のフリーソフトウェアを公開しています。
SQLエディタ画面から Ctrl+Eで実行計画が簡単に見られるようにしています。よろしければお使いください。
MySQLへの接続には別途 MyODBC (Version 5.1が良いでしょう)が必要となります。
MySQL以外でも、Oracle, SQL Server, DB2, PostgreSQLで実行計画を表示する事が出来ます。
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/
コメント(0件)