Mysql Explainコマンドの使用と分析

Mysql Explainコマンドの使用と分析

mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合する方法を示すために使用されます。このコマンドを使用すると、クエリ ステートメントまたはテーブル構造のパフォーマンス ボトルネックを分析し、パフォーマンスを向上させる SQL ステートメントを作成できます。expalin コマンドを使用すると、次の情報を取得できます。

  • 1. 表の読み順
  • 2. テーブル読み取り操作の操作タイプ
  • 3. どのインデックスを使用できますか?
  • 4. 実際に使用されているインデックスはどれですか?
  • 5. テーブル間の参照
  • 6. オプティマイザーによってクエリされる各テーブルの行数はいくつですか?

explain を使用するには、次のように、select ステートメントの前に explain を追加するだけです。

select * form codetc の説明。

次のような結果が得られます。

以下では、結果の説明列について簡単に説明します。

id: ステートメントの実行順序識別子。

  • select_type: SELECT タイプ。次のいずれかになります。
  • シンプル -- サブクエリとユニオンがないことを意味します
  • サブクエリ --サブクエリ
  • 派生 --一時テーブル
  • 連合
  • 結合結果 --結果の結合

実際の開発では、サブクエリはできる限り使用せず、結合を使用してサブクエリを完了する必要があります。

table : このデータ行がどのテーブルに関するものか、つまりテーブル名を表示します。

type : これは重要な列であり、使用されている接続のタイプを示します。結合タイプは、最良から最悪の順に、const、eq_reg、ref、range、indexhe、および ALL です。

possible_keys : このテーブルに適用できる可能性のあるインデックスを表示します。空の場合、インデックスは作成できません。関連するフィールドの WHERE 句から適切なステートメントを選択できます。

key : 実際に使用されるインデックス。 NULL の場合、インデックスは使用されません。まれに、MYSQL が最適化されていないインデックスを選択することがあります。この場合、SELECT ステートメントで USE INDEX (indexname) を使用してインデックスの使用を強制したり、IGNORE INDEX (indexname) を使用して MySQL にインデックスを無視するように強制したりできます。

key_len : 使用するインデックスの長さ。長さが短いほど、精度を失わずに良くなります。

ref : インデックスのどの列が使用されているかを示します。可能な場合は定数を示します。

行数: 要求されたデータを返すために MYSQL がチェックする必要があると見なす行数。

追加: MYSQL がクエリを解析する方法に関する追加情報。これについては表 4.3 で説明しますが、ここで見られる悪い例は、temporary の使用と filesort の使用です。これは、MYSQL がインデックスをまったく使用できないため、取得が遅くなることを意味します。

追加列に返される説明の意味

Distinct : MYSQL は結合内の行と一致する行を見つけると、それ以上検索しません。

存在しない: MYSQL は LEFT JOIN を最適化し、LEFT JOIN 基準に一致する行が見つかると、それ以上検索を行いません。

各レコードの範囲がチェックされました(インデックス マップ: #): 理想的なインデックスが見つからなかったため、前のテーブルの各行の組み合わせに対して、MYSQL は使用するインデックスをチェックし、それを使用してテーブルから行を返します。これは、インデックスを使用する接続の中で最も遅いものの 1 つです。

filesort の使用: これが表示される場合は、クエリを最適化する必要があります。 MYSQL は、返される行をどのように順序付けるかを検出するために追加の手順を実行する必要があります。結合タイプに基づいてすべての行をソートし、条件に一致するすべての行のソートキー値と行ポインターを保存します。

インデックスの使用: 列データは、実際に読み取ることなく、インデックスの情報のみを使用してテーブルから返されます。これは、テーブルに対して要求されたすべての列が同じインデックスの一部である場合に発生します。

temporary の使用: これが表示される場合は、クエリを最適化する必要があります。ここで、MYSQL は結果を格納するための一時テーブルを作成する必要があります。これは通常、GROUP BY ではなく、異なる列セットに対して ORDER BY が実行されたときに発生します。

使用場所: WHERE 句は、次のテーブルと一致する行やユーザーに返される行を制限するために使用されます。これは、テーブル内のすべての行を返す必要がなく、結合タイプが ALL またはインデックスの場合、またはクエリに問題がある場合に発生する可能性があります。さまざまな結合タイプの説明 (効率の順に並べ替え)

system : テーブルにはシステム テーブルという 1 つの行のみが含まれます。これは const 接続タイプの特殊なケースです。

const : このクエリに一致するテーブル内のレコードの最大値 (インデックスは主キーまたは一意のインデックスにすることができます)。行が 1 つしかないため、この値は実際には定数です。これは、MYSQL が最初に値を読み取ってから定数として扱うためです。

eq_ref : 接続時に、MYSQL はクエリ時に各レコード結合の前のテーブルからレコードを読み取ります。クエリがインデックスを主キーまたは一意キーとして使用する場合に使用されます。

ref : この結合タイプは、クエリが一意キーでも主キーでもないキー、またはこれらのタイプのいずれかの一部 (たとえば、左端のプレフィックスを使用) を使用する場合にのみ発生します。前のテーブルとの各行の結合ごとに、すべてのレコードがテーブルから読み取られます。このタイプは、インデックスと一致するレコードの数に大きく依存します。少ないほど良いです。

range : この結合タイプは、インデックスを使用して行の範囲を返します。たとえば、何かを検索するために > または < を使用した場合などです。

インデックス: この結合タイプは、前のテーブル内のすべてのレコードの完全スキャンを実行します (インデックスは通常、テーブル データよりも小さいため、ALL よりも優れています)。

ALL : この結合タイプは、前のレコードと組み合わせて各レコードの完全スキャンを実行しますが、これは一般的に好ましくないため、避けるべきです。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL のパフォーマンス分析と使用方法の説明
  • mysql explain(分析インデックス)の使い方の詳しい説明
  • MySql で SQL 実行プランをクエリするために explain を使用する方法
  • MySQL は低速クエリを可能にします (EXPLAIN SQL ステートメントの使用の概要)
  • mysql explain の使用法 (クエリ ステートメントを最適化するために explain を使用する)
  • MySQL 最適化ツールである explain の使い方の紹介
  • MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析
  • MySQL 実験: explain を使用してインデックスの傾向を分析する
  • MySQLの詳細な説明Explain
  • MySQL で explain ステートメントを使用する基本的なチュートリアル

<<:  web.config (IIS) および .htaccess (Apache) の構成

>>:  JavaScript ベースで年・月・日の 3 階層連携を実現

推薦する

FirefoxのWeb開発者を使用してWebページのスタイルを無効にする方法

前提条件: Web開発者プラグインがインストールされている操作手順: [ツール] -> [We...

MySQL 2級コンピュータ試験共通テストポイント 8つのMySQLデータベース設計最適化方法

MySQLデータベース設計の8つの最適化方法の詳細は次のとおりです。 1. 最も適切なフィールド属性...

W3C チュートリアル (7): W3C XSL アクティビティ

スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。XSL 言語は、X...

Nginx proxy_pass の / スラッシュによって引き起こされた殺人事件の詳細な説明

背景nginx サーバー モジュールは 2 つのサーバーにプロキシする必要があるため、異なるサーバー...

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

MySQL設定ファイルを変更できない問題の解決方法(Win10)

他の人のために解決した問題を記録します。問題の説明MySQLのバージョンは5.7、オペレーティングシ...

Linux で killall コマンドを使用してプロセスを終了する 8 つの例

Linux コマンドラインには、プロセスを強制終了するためのコマンドが多数用意されています。たとえば...

nginx リバース プロキシの魔法のスラッシュについての簡単な説明

nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...

CSS3 @mediaの基本的な使い方のまとめ

//文法: @media mediatype and | not | only (メディア機能) ...

MySQL で null 値と空文字 ('') を区別する

日常の開発では、データベースの追加、削除、変更、クエリが一般的に行われるため、Mysql で NUL...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

Facebook によるインターネット サービスのほぼ完璧な再設計

<br />出典: http://www.a-xuan.cn/?p=197 先ほどFac...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

CSSはマウスが画像に移動したときにマスク効果を実現します

1.マスクレイヤーのHTMLコードと画像をdivに配置する.img_div に入れました。 <...

Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...