1. シナリオの説明: 同僚から MySQL で explain を使用する方法を教わったので、返されたコンテンツの意味を確認しました。 2. 現在、役に立つコンテンツは次のように記録されています。 1. EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合する方法を示します。より適切なインデックスを選択し、より最適化されたクエリ ステートメントを記述するのに役立ちます。 これを使用するには、select ステートメントの前に explain を追加するだけです。 select count(DISTINCT uc_userid) as user_login from user_char_daily_gameapp_11 where uc_date >= "2017-09-04" and uc_date<="2017-09-08" AND uc_date >= "2017-06-01" LIMIT 1 を説明します。 2. EXPLAIN 列の説明: テーブル: この行のデータがどのテーブルに関するものかを表示します 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 がインデックスをまったく使用できないため、取得が遅くなることを意味します。 3. 追加列によって返される説明の意味 Distinct: MYSQL が行に一致する行を見つけると、それ以上検索は行われません。 存在しない: MYSQL は LEFT JOIN を最適化します。LEFT JOIN 基準に一致する行が見つかると、それ以上検索は行われません。 各レコードの範囲がチェックされました (インデックス マップ: #): 理想的なインデックスが見つからなかったため、前のテーブルの各行の組み合わせに対して、MYSQL は使用するインデックスをチェックし、それを使用してテーブルから行を返します。これはインデックスを使用する最も遅い接続の1つです filesort の使用: これが表示される場合は、クエリを最適化する必要があります。 MYSQL は、返される行をどのように順序付けるかを検出するために追加の手順を実行する必要があります。接続の種類によって異なり、 ソートキー値と条件に一致するすべての行への行ポインタを保存して、すべての行をソートします。 インデックスの使用: 列データは、実際に読み取ることなく、インデックスの情報のみを使用してテーブルから返されます。これは、テーブルに対して要求されたすべての列が同じインデックスの一部である場合に発生します。 一時的な使用 このメッセージが表示されたら、クエリを最適化する必要があります。ここで、MYSQL は結果を格納するための一時テーブルを作成する必要があります。これは通常、GROUP BY ではなく、異なる列セットに対して ORDER BY が実行されたときに発生します。 使用場所 WHERE 句は、どの行が次のテーブルと一致するか、またはユーザーに返されるかを制限するために使用されます。テーブル内のすべての行を返したくない場合、接続タイプ ALL またはインデックスの場合、これが発生するか、クエリに問題があります。さまざまな接続タイプの説明 (効率順に並べられています) システム テーブルには、システム テーブルという 1 つの行のみが含まれます。これはconst接続型の特別なケースです const: このクエリに一致するテーブル内のレコードの最大値 (インデックスは主キーまたは一意のインデックスにすることができます)。行は1つしかないので、この値は実際には定数です。 MYSQL は最初に値を読み取り、それを定数として扱います。 eq_ref: 結合では、MYSQL は結合内の各レコードに対して前のテーブルからレコードを読み取ります。クエリではインデックスを主キーまたは一意のキーとして使用します。 ワンクリックですべて使用可能 ref: この結合タイプは、クエリが一意または主キーではないキー、またはこれらのタイプのいずれかの一部 (たとえば、左端のプレフィックスを使用) を使用する場合にのみ発生します。前の表 行結合ごとに、すべてのレコードがテーブルから読み取られます。このタイプは、インデックスと一致するレコードの数に大きく依存します。少ないほど良いです。 範囲: この結合タイプは、インデックスを使用して行の範囲を返します。たとえば、何かを検索するために > または < を使用した場合などです。 インデックス: この結合タイプは、前のテーブルのすべてのレコードの完全スキャンを実行します (インデックスは一般にテーブルデータよりも小さいため、ALL よりも優れています) ALL: この結合タイプは、以前の各レコードの完全スキャンを実行します。これは通常、好ましくないため、避ける必要があります。 要約する 上記は、MySQL での EXPLAIN コマンドとその使用法の詳細な説明です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。 以下もご興味があるかもしれません:
|
<<: Linux で crontab を使用してスケジュールされたタスクを追加する方法
1998 年の CSS2 勧告の時点で、テーブルは徐々に舞台から消え、歴史の中に記録されるようになり...
目次序文1. SCPの使用法2. sftpを使用する3. scp と sftp の違いは何ですか?ど...
目次1. redo ログ (MySQL ストレージ エンジン InnoDB のトランザクション ログ...
序文Mac システムのターミナルでファイルの権限を変更するには、Linux の chmod コマンド...
結果:実装コードhtml <link href='https://fonts.goog...
目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...
序文MySQL 8.0.13 では、インデックス スキップ スキャン (インデックス ジャンプ スキ...
初心者は自分で録音しましょう1. スーパーバイザーをインストールします。 Supervisor は ...
前回の記事では、https を使用したローカルノードサービスアクセスを実装しました。前回の記事の効果...
目次序文子コンポーネントは親コンポーネントにデータを渡す1. 親コンポーネントから子コンポーネントに...
解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...
目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...
この記事は主に、SQL のストアド プロシージャから返されたデータを取得するプロセスの分析を紹介しま...
目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...
序文Tomcat は優れた Java コンテナですが、避けられない小さな落とし穴もいくつかあります。...