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 はスクロール可能なポップアップウィンドウ効果を実装します
Bash 初期化ファイル対話型ログインシェル次の場合にはログイン シェルを取得できます。ローカル端末...
目次序文積極的な撤退例外、拒否、および発行されたエラー信号まとめ序文NodeJS プロセスが終了する...
この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...
目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...
システムド: CentOS 7のサービスsystemctlスクリプトは、/usr/lib/syste...
コード:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC &...
多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...
日常の開発では、データベースの追加、削除、変更、クエリが一般的に行われるため、Mysql で NUL...
プレビューアドレス: https://ovsexia.gitee.io/leftfixed/ htm...
この記事では主に、MySQL サービスの自動停止の解決策を紹介し、参考と学習のために共有します。一緒...
目次1. テーブルを作成する1.1. テーブルを作成するための基本構文1.1.1. シンプルなテーブ...
ある日、内部結合を含む SQL ステートメントの実行速度はそれほど遅くはない (0.1 ~ 0.2)...
この記事では、例を使用して、MySQL ユーザー権限を確認および管理する方法を説明します。ご参考まで...
1. Tomcatをインストールする1. Docker HubでTomcatイメージを見つける d...
重要でないflex-basisテキストオーバーフローに省略記号を追加するという小さな機能に多くの問題...