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 を使用してスケジュールされたタスクを追加する方法
1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...
目次JS 関数呼び出し、適用、バインドメソッド1. call() メソッド1. call() メソッ...
この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...
今日、新しい技を学びました。あまりやったことがなかったので、今まで知りませんでした...目的: リン...
NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...
この記事は、IDEA で Web プロジェクトを作成し、Tomcat を構成する方法についての統合記...
Linuxバージョン: CentOS 7 [root@azfdbdfsdf230lqdg1ba91 ...
導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...
XPath は、XML ドキュメントの一部を選択するための言語です。 XPath は、XSLT、XQ...
どの DBMS でも、インデックスは最適化にとって最も重要な要素です。データ量が少ない場合、適切なイ...
不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...
MySQL(5.6以下)はjsonを解析します #json 解析関数 DELIMITER $$ `j...
目次1. ダウンロードする前に理解しておくべき概念2. 必要なバージョンを選択する3. MySQLサ...
複数のTomcatをインストールする場合は、システムにJDKがインストールされている必要があり、 T...
本日実装する機能は、以下の機能です。vue.js シミュレーションカレンダープラグインさて、もう無駄...