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 を使用してスケジュールされたタスクを追加する方法
日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...
まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...
1. 作成する [テーブル名] (フィールド1、フィールド2、...) 値 (値1、値2、...) ...
この記事では、MySQL 8.0.11 MSIバージョンのインストールと設定のチュートリアルを参考ま...
Yum (フルネームは Yellow dog Updater, Modified) は、Fedora...
序文ミニプログラムを開発する過程では、録音機能を実装し、録音を再生し、録音をサーバーにアップロードす...
目次1. はじめに1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 2...
1. 理由新しいシステムに MySQL を再インストールする必要があったので、将来詳細を忘れた場合...
概要es6 では、配列またはオブジェクトから指定された要素を取得する新しい方法が追加されました。これ...
この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...
HTMLタグのリストマークタイプ名前または意味効果述べるファイルのタグ付け<HTML> ...
背景このバグは滾動條占據空間ことで発生していました。いくつかの情報を確認して、ようやく解決しました。...
通常のウェブサイトのソースコードを開くと、ソースコードは<!DOCTYPE htmlで始まる必...
Docker コンテナのタイムゾーンがホストマシンと一致しているかどうかを確認するにはどうすればよい...
1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...