mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合する方法を示すために使用されます。このコマンドを使用すると、クエリ ステートメントまたはテーブル構造のパフォーマンス ボトルネックを分析し、パフォーマンスを向上させる SQL ステートメントを作成できます。expalin コマンドを使用すると、次の情報を取得できます。
explain を使用するには、次のように、select ステートメントの前に explain を追加するだけです。 select * form codetc の説明。 次のような結果が得られます。 以下では、結果の説明列について簡単に説明します。 id: ステートメントの実行順序識別子。
実際の開発では、サブクエリはできる限り使用せず、結合を使用してサブクエリを完了する必要があります。 table : このデータ行がどのテーブルに関するものか、つまりテーブル名を表示します。 type : これは重要な列であり、使用されている接続のタイプを示します。結合タイプは、最良から最悪の順に、const、eq_reg、ref、range、indexhe、および ALL です。 possible_keys : このテーブルに適用できる可能性のあるインデックスを表示します。空の場合、インデックスは作成できません。関連するフィールドの WHERE 句から適切なステートメントを選択できます。 key : 実際に使用されるインデックス。 NULL の場合、インデックスは使用されません。まれに、MYSQL が最適化されていないインデックスを選択することがあります。この場合、SELECT ステートメントで USE INDEX (indexname) を使用してインデックスの使用を強制したり、IGNORE INDEX (indexname) を使用して MySQL にインデックスを無視するように強制したりできます。 key_len : 使用するインデックスの長さ。長さが短いほど、精度を失わずに良くなります。 ref : インデックスのどの列が使用されているかを示します。可能な場合は定数を示します。 行数: 要求されたデータを返すために MYSQL がチェックする必要があると見なす行数。 追加: MYSQL がクエリを解析する方法に関する追加情報。これについては表 4.3 で説明しますが、ここで見られる悪い例は、temporary の使用と filesort の使用です。これは、MYSQL がインデックスをまったく使用できないため、取得が遅くなることを意味します。 追加列に返される説明の意味 Distinct : MYSQL は結合内の行と一致する行を見つけると、それ以上検索しません。 存在しない: MYSQL は LEFT JOIN を最適化し、LEFT JOIN 基準に一致する行が見つかると、それ以上検索を行いません。 各レコードの範囲がチェックされました(インデックス マップ: #): 理想的なインデックスが見つからなかったため、前のテーブルの各行の組み合わせに対して、MYSQL は使用するインデックスをチェックし、それを使用してテーブルから行を返します。これは、インデックスを使用する接続の中で最も遅いものの 1 つです。 filesort の使用: これが表示される場合は、クエリを最適化する必要があります。 MYSQL は、返される行をどのように順序付けるかを検出するために追加の手順を実行する必要があります。結合タイプに基づいてすべての行をソートし、条件に一致するすべての行のソートキー値と行ポインターを保存します。 インデックスの使用: 列データは、実際に読み取ることなく、インデックスの情報のみを使用してテーブルから返されます。これは、テーブルに対して要求されたすべての列が同じインデックスの一部である場合に発生します。 temporary の使用: これが表示される場合は、クエリを最適化する必要があります。ここで、MYSQL は結果を格納するための一時テーブルを作成する必要があります。これは通常、GROUP BY ではなく、異なる列セットに対して ORDER BY が実行されたときに発生します。 使用場所: WHERE 句は、次のテーブルと一致する行やユーザーに返される行を制限するために使用されます。これは、テーブル内のすべての行を返す必要がなく、結合タイプが ALL またはインデックスの場合、またはクエリに問題がある場合に発生する可能性があります。さまざまな結合タイプの説明 (効率の順に並べ替え) system : テーブルにはシステム テーブルという 1 つの行のみが含まれます。これは const 接続タイプの特殊なケースです。 const : このクエリに一致するテーブル内のレコードの最大値 (インデックスは主キーまたは一意のインデックスにすることができます)。行が 1 つしかないため、この値は実際には定数です。これは、MYSQL が最初に値を読み取ってから定数として扱うためです。 eq_ref : 接続時に、MYSQL はクエリ時に各レコード結合の前のテーブルからレコードを読み取ります。クエリがインデックスを主キーまたは一意キーとして使用する場合に使用されます。 ref : この結合タイプは、クエリが一意キーでも主キーでもないキー、またはこれらのタイプのいずれかの一部 (たとえば、左端のプレフィックスを使用) を使用する場合にのみ発生します。前のテーブルとの各行の結合ごとに、すべてのレコードがテーブルから読み取られます。このタイプは、インデックスと一致するレコードの数に大きく依存します。少ないほど良いです。 range : この結合タイプは、インデックスを使用して行の範囲を返します。たとえば、何かを検索するために > または < を使用した場合などです。 インデックス: この結合タイプは、前のテーブル内のすべてのレコードの完全スキャンを実行します (インデックスは通常、テーブル データよりも小さいため、ALL よりも優れています)。 ALL : この結合タイプは、前のレコードと組み合わせて各レコードの完全スキャンを実行しますが、これは一般的に好ましくないため、避けるべきです。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: web.config (IIS) および .htaccess (Apache) の構成
>>: JavaScript ベースで年・月・日の 3 階層連携を実現
この記事の例では、フロントエンドのページング効果を実現するためのJSの具体的なコードを参考までに共有...
1. CSS3の三角形は特殊効果でズームし続けます11.1 画像プレビュー 11.2 index.h...
序文このサービスは数か月前からMySQLに導入されています。私の仕事は基本的にターミナルで行われるた...
この記事の例では、vue3 が独自のページングコンポーネントをカプセル化する具体的なコードを参考まで...
1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...
序文データベースの応用において、プログラマーは継続的な実践を通じて多くの経験を積んできました。これら...
このセクションでは、Web ページ内のテキストをスクロールしたり、スクロール プロパティを制御できる...
Windows: NTFS、FATをサポートLinux は次のファイル形式をサポートしています: C...
目次DockerにRedisをインストールする1. Redisイメージを見つける2. Redisイメ...
カテゴリ選択を選択します。テストの結果、IE と FF はこの要素を適切にサポートできることがわかり...
以前は、フロートはレイアウトによく使用されていましたが、フローティングレイアウトを使用すると親要素の...
メモリリークとは何ですか?メモリ リークとは、新しいメモリが作成されたが、解放またはガベージ コレ...
例:例として、Python コード loop_hello.py を使用します。このコードは、ループ回...
実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...