日常業務では、実行に時間のかかる 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 つの方法
Ubuntu 20.04をインストールする NVIDIAドライバーをインストールする Pytouch...
1. 目標: mysql の character_set_server の値を latin1 から ...
目次手動バックアップタイマーバックアップ手動バックアップ1) cmd コンソール: mysqldum...
目次1. WordPressの導入1. 環境を整える(II) イメージを実行するDocker の作成...
文字セットエラーは常に存在するロケール: LC_CTYPE をデフォルト ロケールに設定できません:...
以前、MySQL クエリ文の実行プロセスについての記事がありました。ここでは、更新文の実行プロセスを...
1. ダウンロード、例として8.0を取り上げますダウンロードアドレス: https://dev.my...
コードをコピーコードは次のとおりです。 <form action="/hehe&qu...
1. Alipay方式: Alipay メソッド: Alipay をクリックして支払い、バックエンド...
目次方法1方法2 nginxをインストールした後、PHPコードを解析できないことがわかりました。解決...
目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...
<br />この Web ページ制作スキル チュートリアルは、Web サイトのアイコンを...
MySQL ページング クエリは通常、制限を通じて実装されます。 limit は 1 つまたは 2 ...
CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命...
## 1最近、docker デプロイメントを学習しており、当初は nginx を docker 化す...