explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法 次のように、select の前に explain を追加するだけです。 mysql> 説明 1 を選択します。 +----+-------------+--------+-----------+--------+---------------+-------+-------+-------+---------+----------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+--------+-----------+--------+---------------+-------+-------+-------+---------+----------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | テーブルは使用されません | +----+-------------+--------+-----------+--------+---------------+-------+-------+-------+---------+----------------+ 2. 説明の情報 1. id: SELECT が属する行を示します。 idが大きいほど実行順序が高くなります。idが同じ場合は上から下の順に実行されます。 2. select_type: 対応する行が単純なクエリか複雑なクエリかを表示します。 1) SIMPLE: シンプルなクエリ。サブクエリとUNIONを含まないことを意味します。 2) SUBQUERY: サブクエリを示します 3) DERIVED: FORM句に含まれるサブクエリのSELECTを示すために使用されます。 4) ユニオン: 3. テーブル: アクセスするテーブルを示します 4. パーティション: パーティションにアクセスする 5. type: テーブル内の行を検索する方法を表す関連付けタイプ。 1) ALL: テーブル全体をスキャンします。データを見つけるには、すべてのデータを最初から最後までスキャンする必要があります(limitキーワードではすべてのデータがスキャンされません) 2) インデックス: インデックススキャン。これは、テーブルが行順ではなくインデックス順にスキャンされることを除いて、フル テーブル スキャンと同じです。主な利点は、ソートが回避されることです。最大の欠点は、テーブル全体をインデックス順に読み取るオーバーヘッドです。 3) 範囲:範囲スキャン。これは、インデックス全体を走査せずに、インデックス内の特定のポイントから開始する制限付きインデックス スキャンです。 4) ref: インデックスアクセス。単一の値に一致するすべての行を返します。これは、一意でない所有権、または一意でないプレフィックスを持つ一意の所有権を使用している場合にのみ発生します。 5) eq_ref: 主キー インデックスと一意のインデックスである場合、このインデックスを使用して検索し、最大 1 つのレコードを返します。 6) const、system: これらのアクセス タイプは、MySQL がクエリの一部を最適化し、定数に変換できる場合に使用されます。 6. possible_keys: クエリに使用できるキーを表示します 7. key: MySQL は、このテーブルへのアクセスを最適化するために使用するインデックスを決定します。このインデックスが possible_keys にない場合は、カバーするインデックスを選択することがあります。インデックスが使用されていない場合、この値は NULL になります。 8. key_len: インデックスのバイト数。短いほど良いです。一般的に、key_len はインデックス列フィールド型の長さに等しくなります。たとえば、int は 4 バイト、bigint は 8 バイト、date は 3 バイト、datetime は 8 バイトです。インデックス列が文字列型の場合、その文字セットを考慮する必要があります。utf8 の各文字は 3 つのフィールドを占有し、変数型 (varchar) はさらに 2 バイトを必要とします。インデックス列が null 可能な場合は、追加のフィールドが必要です。 9. 参照: 10. 行数: MySQLが必要な行を見つけるために読み込む必要があると推定する行数 11. フィルター: 読み取られた行数 (推定) に対する返された行数の割合。値が大きいほど、優れています。 12. 追加: 他の列に収まらない重要な情報を表示します。一般的な値は次のとおりです。 1) インデックスの使用: テーブルへのアクセスを避けるためにカバーインデックスを使用することを示します。 2) whereの使用: MySQLサーバーはストレージエンジンが行を取得した後にフィルタリングします。 3) 一時テーブルの使用: MySQL がクエリ結果をソートするときに一時テーブルを使用することを示します。 3. 例 例1: mysql> explain select * from bd_dept; +----+-------------+----------+-----------+--------+---------------+-----+-------+-------+------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+----------+-----------+--------+---------------+-----+-------+-------+------+------+------+------+ | 1 | シンプル | bd_dept | NULL | すべて | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL | +----+-------------+----------+-----------+--------+---------------+-----+-------+-------+------+------+------+------+ この文はインデックスを使用せずにテーブル全体をスキャンしていることがわかります。 例2: mysql> explain select * from bd_dept where id=1; +----+-------------+----------+-----------+--------+---------------+----------+-------+-------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+----------+-----------+--------+---------------+----------+-------+-------+------+------+------+ | 1 | SIMPLE | bd_dept | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL | +----+-------------+----------+-----------+--------+---------------+----------+-------+-------+------+------+------+ このステートメントは主キー インデックスを使用します。結果を取得するには、1 つのレコードをスキャンするだけで済みます。int 型は 4 バイトを占めるため、ken_len=4 になります。 例3: mysql> explain select * from bd_dept where dept_code='01'; +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+------+------+------+------+ | 1 | SIMPLE | bd_dept | NULL | const | dept_code | dept_code | 32 | const | 1 | 100.00 | NULL | +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+------+------+------+------+ dept_code は一意のインデックス フィールドであり、フィールド タイプは varchar(10) であり、空ではないため、インデックスの長さは 10*3+2=33 になります。 例4: mysql> explain select * from bd_dept where create_date>'2020-04-29'; +----+-------------+----------+-----------+---------+---------------+-------------+-------+-------+---------+-----------------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+----------+-----------+---------+---------------+-------------+-------+-------+---------+-----------------------+ | 1 | SIMPLE | bd_dept | NULL | range | create_date | create_date | 4 | NULL | 1 | 100.00 | インデックス条件を使用 | +----+-------------+----------+-----------+---------+---------------+-------------+-------+-------+---------+-----------------------+ create_date は日付型で、共通のインデックス フィールドであり、空にすることができます。クエリ条件はより大きいため、関連付けの種類は範囲となり、インデックスの長さは 3+1=4 になります。 例5: mysql> explain select a.id, a.dept_name, b.dept_name parent_name from bd_dept a inner join bd_dept b on a.id=b.parent_id; +----+-------------+---------+-----------+----------+---------------+---------+----------+-----------------------+-----------+-------------+-------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+---------+-----------+----------+---------------+---------+----------+-----------------------+-----------+-------------+-------------+ | 1 | SIMPLE | b | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | where の使用 | | 1 | シンプル | a | NULL | eq_ref | プライマリ | プライマリ | 4 | zhi_test.b.parent_id | 1 | 100.00 | NULL | +----+-------------+---------+-----------+----------+---------------+---------+----------+-----------------------+-----------+-------------+-------------+ MySQLは最初にテーブル全体をスキャンし、次に主キーを介して関連付けていることがわかります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Xshellの一般的な問題と関連する設定の詳細な説明
>>: Vue はスクロール可能なポップアップウィンドウ効果を実装します
まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...
序文MySQL では、EXPLAIN コマンドを使用して、テーブルの接続方法や SELECT ステー...
目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....
目次パーティション分割メカニズムSELECTクエリINSERT操作DELETE操作更新操作パーティシ...
ステップ1: システムのアーキテクチャを確認する dpkg --print-architecture...
目次連合テーブルの初期化ステートメントの実行連合の結果ユニオンオールグループ化十分なメモリステートメ...
tinyMCE の使用方法の詳細な説明初期化TinyMCE を初期化するときは、ページの HEAD ...
MySQL sql_modeの適切な設定sql_mode は見落とされやすい変数です。デフォルト値は...
ソフトウェアとハードウェア環境centos7.6.1810 64ビット cat /etc/red...
Windowsでのインストールの紹介:こちらもご覧ください –》WindowsでのMySQL 8.0...
この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...
VC6.0は確かに古すぎるVC6.0は昔の開発ツールです。現在のwin10では対応していません。しか...
目次Vue でのスロットの使用: slotスコープ付きスロット: テンプレートタグで囲む要約するVu...
目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...
昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...