日常業務では、実行に時間のかかる 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 つの方法
<本文> <div id="ルート"> <フォー...
現在、Web デザインではタブが広く使用されていますが、一般的に次の 2 つのタイプに分けられます。...
非常に便利な機能group_concat() について、マニュアルには次のように記載されています: ...
基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...
目次1: galera-clusterの紹介2. galera-clusterの仕組み3: Mari...
目次序文1. ファントムリーディングとは何ですか? 2. ファントムリーディングの問題点は何ですか?...
この記事では、reduce()、filter()、map()、every()、some()、spre...
最近、Djangoを学習しているときにデータベースを使用する必要があったため、MySQLで使用するた...
目次成果を達成するsortablejs の紹介具体的な実装成果を達成する最初は、antdesign ...
HTML徹底解析(14)特殊文字 ■ よく使われる特殊文字 HTMLタグを知っていれば、特殊文字の使...
ktl ツールを使用して、mysql から mysql にデータを同期します。 1. 新しいジョブス...
説明するこの記事では、Vue テクノロジーに基づいて再帰コンポーネントを実装する方法を紹介します。 ...
目次インストールソフトウェア管理匿名アクセスモード設定ファイルを変更するクライアントがサーバーにログ...
この記事では、explain を使用して SQL ステートメントを分析する方法を紹介します。実際、イ...
一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...