EXPLAIN コマンドの詳細な説明と MySQL での使用方法

EXPLAIN コマンドの詳細な説明と MySQL での使用方法

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 コマンドとその使用法の詳細な説明です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。

以下もご興味があるかもしれません:
  • MySQLクエリ最適化におけるExplainの詳細な分析
  • MySQL での explain の使用方法の詳細な説明
  • MySQLの概要説明
  • MySQL のパフォーマンス分析と使用方法の説明
  • MySQL における explain の役割の詳細な説明
  • mysql explain(分析インデックス)の使い方の詳しい説明
  • MySQL での実行計画の explain コマンド例の詳細な説明
  • MYSQL 実行プランの説明
  • MySQLのEXPLAINコマンドの詳細な説明
  • MySQL の EXPLAIN ステートメントと使用例

<<:  Linux で crontab を使用してスケジュールされたタスクを追加する方法

>>:  Reactフックの長所と短所

推薦する

CSS で TikTok テキスト揺れエフェクトを実装する例

日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...

MySQL テーブルの追加、削除、変更、クエリの基本チュートリアル

1. 作成する [テーブル名] (フィールド1、フィールド2、...) 値 (値1、値2、...) ...

MySQL 8.0.11 MSI バージョンのインストールと構成のグラフィック チュートリアル

この記事では、MySQL 8.0.11 MSIバージョンのインストールと設定のチュートリアルを参考ま...

CentOSにPHP+Apache+MySQLのサーバー環境をインストールして構築する

Yum (フルネームは Yellow dog Updater, Modified) は、Fedora...

ミニプログラム録画機能の実装

序文ミニプログラムを開発する過程では、録音機能を実装し、録音を再生し、録音をサーバーにアップロードす...

MySQL のインデックスの原理とクエリの最適化の詳細な説明

目次1. はじめに1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 2...

MySQL Installer 8.0.21 インストール チュートリアル (画像とテキスト付き)

1. 理由新しいシステムに MySQL を再インストールする必要があったので、将来詳細を忘れた場合...

JS ES6における構造化分解についてお話しましょう

概要es6 では、配列またはオブジェクトから指定された要素を取得する新しい方法が追加されました。これ...

Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...

HTML タグのリストと使用方法

HTMLタグのリストマークタイプ名前または意味効果述べるファイルのタグ付け<HTML> ...

スクロールバーがスペースを占有することで発生するバグを修正しました

背景このバグは滾動條占據空間ことで発生していました。いくつかの情報を確認して、ようやく解決しました。...

HTMLバージョン宣言DOCTYPEタグ

通常のウェブサイトのソースコードを開くと、ソースコードは<!DOCTYPE htmlで始まる必...

Dockerコンテナのタイムゾーン調整操作

Docker コンテナのタイムゾーンがホストマシンと一致しているかどうかを確認するにはどうすればよい...

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...