ホームページ >データベース >mysql チュートリアル >MySQL での Explain の使用とパフォーマンス分析
MySQL は、SELECT ステートメントを分析し、開発者が最適化するために SELECT 実行の詳細情報を出力できる EXPLAIN コマンドを提供します。EXPLAIN コマンドの使用法は非常に簡単で、MySQL のパフォーマンス分析と使用方法の説明に重点が置かれています。この記事では内容をご紹介するために、このプロセスを実際の例を交えて紹介していきます!
1. Explain ステートメントを使用して分析結果を表示します
たとえば、
explain select * from test1 where id=1;
が表示されます。このうち、
type=const は、
key によって 1 回見つかったことを意味します。 =primary は主キーが使用されることを意味します。
type=all は完全なテーブル スキャンを意味します。
key=null はインデックスが使用されないことを意味します。 type=ref ですが、このとき
結合クエリでは複数の行が一致するとみなされるため、通常は REF になります。
2. MYSQL の結合インデックステーブルに id、key1、key2、key3 があり、これら 3 つが結合インデックスを形成すると仮定します。次に、
id selecttype table type possible_keys key key_len ref rows extra各列。
のようなものを作成します。インデックス付き (from test where key1=1 order by key3 など) を Explain で分析すると、normal_key インデックスのみが使用されますが、これは
where 句に対してのみ機能し、後続の order by はソートする必要があります。
my.ini: where key1=....
where key1=1 and key2=2
where key1=3 and key3=3 and key2=2
1 秒以上のスロークエリログを記録します
mysqlsla を使用して分析できます。
DMS などの mysqlreport を使用して、選択、更新、挿入、削除、置換などの割合を分析することもできます。
4. MYISAM および INNODB ロックmyisam では、テーブル ロックに注意してください。たとえば、複数のUPDATE操作を実行した後、再度選択すると、SELECT
行ロックが使用される前に、すべてのUPDATE操作が完了するまで待つ必要があります。上記の問題はそうではありません。
5. MYSQL のトランザクション設定項目long_query_time=1 log-slow-queries=d:\mysql5\logs\mysqlslow.log
は、トランザクションがコミットされると、トランザクション ログが直ちに ディスクに書き込まれ、データとインデックスも同時に更新されることを意味します。
innodb_flush_log_at_trx_commit=1トランザクションが送信されると、トランザクション ログはすぐにはディスクに書き込まれません。1 秒ごとに書き込まれます。
innodb_flush_log_at_trx_commit=0トランザクションが送信されると、すぐにディスク ファイルに書き込まれます。カーネルバッファにのみ書き込まれますが、すぐには更新されません) ディスクに更新されますが、1 秒ごとにディスクに更新され、データとインデックスが同時に更新されます
使い方を説明します
innodb_flush_log_at_trx_commit=2
前者は、後者は主にいくつかの関連インデックス情報を提供します。今日の議論の焦点は後者です。
例EXPLAIN tbl_name或:EXPLAIN [EXTENDED] SELECT select_options
属性の意味
idselectクエリシリアル番号。
mysql> explain select * from event; +—-+————-+——-+——+—————+——+———+——+——+——-+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +—-+————-+——-+——+—————+——+———+——+——+——-+ | 1 | SIMPLE | event | ALL | NULL | NULL | NULL | NULL | 13 | | +—-+————-+——-+——+—————+——+———+——+——+——-+ 1 row in set (0.00 sec)
クエリタイプを選択します。主に通常のクエリと、ユニオンクエリやサブクエリなどの複雑なクエリを区別します。
select_type
が出力する行によって参照されるテーブル。ユニオンクエリで使用されるタイプ
typeは、アクセスタイプを示します。はより重要な指標であり、最良から最悪までの結果値は次のとおりです。
table
一般的に言えば、クエリが少なくとも範囲レベルに達していることを確認する必要があります。できれば ref. MySQL がテーブル内の行を検索するために使用できるインデックス。空の場合は、関連するインデックスが存在しないため、パフォーマンスを向上させるために、一部のフィールドが参照されているかどうかを確認するか、フィールドがそのフィールドに適していないかどうかを確認できます。 key
インデックスが選択されていない場合、キーは NULL になります。キーが NULL の場合、キーは NULL になります。 length は NULL です。この値に特別な注意を払うことで、mysql が複数の主キーで実際に使用するものを決定できることが示唆されています。
rows
この数値。
MySQLクエリパフォーマンス分析ツール - キーワード分析の説明
以上がMySQL での Explain の使用とパフォーマンス分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。