ホームページ  >  記事  >  データベース  >  MySQL での Explain の使用とパフォーマンス分析

MySQL での Explain の使用とパフォーマンス分析

黄舟
黄舟オリジナル
2017-12-06 09:24:461662ブラウズ

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 はソートする必要があります。

3. スロークエリ分析を使用する

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

この数値。

Extra

インデックスのみの場合、テーブル全体をスキャンするよりも高速に情報が取得されることを意味します。 where used がある場合は、where 制限が使用されていることを意味します。

where が不可能な場合は、一般に、where が必要ないことを意味します。この情報に [Using filesort] または [Usingtemporary] が表示されている場合は、 WHERE と ORDER BY のインデックスは、多くの場合、WHERE に基づいて決定されると、コスト効率が高いかどうかによって、ORDER BY を使用するときに問題が発生します。最初にフィルタリングしてからソートするか、最初にソートしてからフィルタリングする方がコスト効率が高いかどうかを判断します。

ここでは、MySQL のパフォーマンス分析と使用方法についての知識を紹介しました。私もこれについてはある程度理解しています。

Mysql における EXPLAIN の役割

mysqlスロークエリとEXPLAINの紹介

MySQLクエリパフォーマンス分析ツール - キーワード分析の説明

mysqlの説明タイプ接続タイプの例

以上がMySQL での Explain の使用とパフォーマンス分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。