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 階層連携を実現
前提条件: Web開発者プラグインがインストールされている操作手順: [ツール] -> [We...
MySQLデータベース設計の8つの最適化方法の詳細は次のとおりです。 1. 最も適切なフィールド属性...
スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。XSL 言語は、X...
背景nginx サーバー モジュールは 2 つのサーバーにプロキシする必要があるため、異なるサーバー...
私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...
他の人のために解決した問題を記録します。問題の説明MySQLのバージョンは5.7、オペレーティングシ...
Linux コマンドラインには、プロセスを強制終了するためのコマンドが多数用意されています。たとえば...
nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...
//文法: @media mediatype and | not | only (メディア機能) ...
日常の開発では、データベースの追加、削除、変更、クエリが一般的に行われるため、Mysql で NUL...
少し前に、製品バージョンをテスト用にテスターに提出したのですが、テスト結果はまったく予想外のもの...
<br />出典: http://www.a-xuan.cn/?p=197 先ほどFac...
目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...
1.マスクレイヤーのHTMLコードと画像をdivに配置する.img_div に入れました。 <...
概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...