日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行することがあります。これらの SQL ステートメントを見つけても、作業が完了したわけではありません。SQL ステートメントがインデックスを使用しているかどうか、および完全なテーブル スキャンが実行されているかどうかを確認するために、explain コマンドを使用してこれらの SQL ステートメントの実行プランを表示することがよくあります。これは、explain コマンドで表示できます。したがって、MySQL のコストベースのオプティマイザについて深く理解でき、また、オプティマイザが考慮する可能性のあるアクセス戦略や、SQL ステートメントを実行するときにオプティマイザが採用すると予想される戦略に関する多くの詳細も取得できます。 EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合する方法を示します。より適切なインデックスを選択し、より最適化されたクエリ ステートメントを記述するのに役立ちます。 これを使用するには、select ステートメントの前に explain を追加するだけです。 のように: a.id=b.id の場合、a,b の形式で姓、名を選択します。 1. EXPLAIN tbl_name EXPLAIN tbl_name は、DESCRIBE tbl_name または SHOW COLUMNS FROM tbl_name の同義語です。 2. EXPLAIN [拡張] SELECT select_options SELECT ステートメントの前にキーワード EXPLAIN を配置すると、MySQL は SELECT の処理方法を説明し、テーブルの結合方法と結合順序に関する情報を提供します。 EXPLAIN を使用すると、インデックスを使用してレコードを検索する SELECT を高速化するために、テーブルにインデックスをいつ追加する必要があるかを知ることができます。 オプティマイザーがテーブルを最適な順序で結合したかどうかも確認できます。オプティマイザーが SELECT ステートメントをテーブルの名前の順序で結合するように強制するには、ステートメントは SELECT だけではなく STRAIGHT_JOIN で始まる必要があります。 EXPLAIN は、SELECT ステートメントで使用されるテーブルごとに 1 行を返します。テーブルは、クエリの処理中に MySQL によって読み取られる順序でリストされます。 MySQL は、シングルスイープマルチ結合アプローチを使用してすべての結合を解決します。つまり、MySQL は最初のテーブルから行を読み取り、次に 2 番目のテーブルで一致する行を見つけ、次に 3 番目のテーブルで一致する行を見つけ、というように繰り返します。すべてのテーブルが処理されると、選択した列が出力され、一致する行がさらにあるテーブルが見つかるまでテーブル リストに戻ります。テーブルから次の行を読み取り、次のテーブルの処理を続行します。 EXTENDED キーワードを使用すると、EXPLAIN は SHOW WARNINGS で表示できる追加情報を生成します。この情報は、SELECT ステートメントでテーブル名と列名を修飾し、最適化ルールを書き換えて実行した後にオプティマイザーが実行する内容を示し、最適化プロセスに関するその他のコメントが含まれる場合もあります。 EXPLAIN の各出力行はテーブルに関する情報を提供し、各行は次の列で構成されます。 id: SELECT 識別子。これは SELECT のクエリ シーケンス番号です。 select_type: SELECT タイプ。
テーブル:テーブル名 タイプ:接続タイプ
possible_keys: possible_keys 列は、MySQL がテーブル内の行を見つけるために使用できるインデックスを示します。この列は、EXPLAIN 出力に表示されるテーブルの順序とは完全に独立していることに注意してください。これは、possible_keys 内の一部のキーが、テーブルが生成された順序で実際に使用できないことを意味します。 key: key 列には、MySQL が実際に使用することを決定したキー (インデックス) が表示されます。インデックスが選択されなかった場合、キーは NULL になります。 MySQL で possible_keys 列のインデックスを強制的に使用または無視するには、クエリで FORCE INDEX、USE INDEX、または IGNORE INDEX を使用します。 key_len: key_len 列には、MySQL が使用することを決定したキーの長さが表示されます。キーが NULL の場合、長さは NULL になります。 key_len 値を使用すると、MySQL が実際に使用する複数部分キーワードの部分の数を決定できることに注意してください。 ref: ref 列には、テーブルから行を選択するためにキーとともに使用される列または定数が表示されます。 行:行の列には、クエリを実行するために MySQL が調べる必要があると考える行数が表示されます。 追加:この列には、MySQL がクエリを解決した方法に関する詳細情報が含まれています。
EXPLAIN 出力の行列のすべての値を乗算すると、結合がどのように機能するかについてのヒントが得られます。これにより、クエリを実行するために MySQL が調べる必要があった行数が大まかにわかります。この製品は、max_join_size 変数を使用してクエリを制限するときに、どのマルチテーブル SELECT ステートメントを実行するかを決定するためにも使用されます。 要約する SQL の EXPLAIN コマンドの使用に関するこの記事はこれで終わりです。SQL EXPLAIN コマンドの使用に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Docker コンテナを他のサーバーに移行する 5 つの方法
Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...
まず、PHP5をインストールするのはとても簡単ですyum install php PHP5 を使用し...
目次1. ブリッジを設定し、検証のためにパケットをキャプチャする1. ブリッジデバイスとセッションを...
Awk は、ソートを含む他の一般的なユーティリティによって実行できるいくつかのタスクを実行できる強...
目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...
float:左/右/なし; 1. 同じレベルフローティング(1)ブロックレベル要素を同じ行に表示する...
目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...
例示するDML(データ操作言語)とは、データベースの追加、削除、変更を行うための操作命令のことです。...
目次1. マイクロタスクとは何ですか? 2. マクロタスクとは何ですか? 3. 事例3.1 結論4....
Centos のサーバー側への適用がますます普及するにつれて、Centos7 もますます使用されるよ...
1 ストアドプロシージャ1.1 ストアドプロシージャとは何かストアド プロシージャは、特定の機能を実...
この記事では、クリックするとランダムグラフィックの生成を実現するJavaScriptの具体的なコード...
<br />ユーザーエクスペリエンスは中国のウェブサイトでますます重視されており、ユーザ...
シナリオ: 検査文書には n 個の検査詳細があり、検査詳細には n 個の検査項目があります。実装効果...
おそらく、この問題にまだ遭遇していない人もいるでしょうから、まずは適応高さとは何かを説明しましょう。...