この記事は、MySQL の実行計画をすばやく理解するのに役立ちます。
通常、低速クエリ SQL
ステートメントをクエリする場合、EXPLAIN
コマンドを使用して SQL の実行計画を表示します。
ステートメント (スルー) 返された情報は、Mysql
オプティマイザーが SQL
ステートメントをどのように実行するかを理解するのに役立ち、分析は最適化のアイデアを提供するのに役立ちます。
1. Explain 関数
Explain コマンドは、主に SQL ステートメントの実行計画を表示するために使用されます。このコマンドは、オプティマイザーによる SQL クエリーステートメントの実行をシミュレートすることができ、 SQL の作成と最適化にご協力ください。それでは、SQl の最適化に役立つ具体的な情報として、 Explain からどのような情報が得られるでしょうか?
テーブル読み取りシーケンス
データ読み取り操作の操作タイプ
使用できるインデックス
実際に使用されるインデックス
テーブル間の参照
各テーブルの行数テーブルはオプティマイザによってクエリされます
2. 使用方法の説明
使用法: 実行される SQL の説明
Explain は、実行される SQL の実行プランのリストを返します。リストには 12 個のフィールドが含まれます。フィールドは合わせて、SQL が実行されるメソッドを説明します。実行計画を実行します。次のリストでは、実行計画テーブルのフィールドの意味を詳しく説明します。
説明 | |
---|---|
select ステートメント クエリのシーケンス番号により、テーブルの読み取り順序が決まります。 | |
タイプクエリの操作タイプ、つまりデータ読み取り操作の操作タイプ | |
クエリ テーブル名 | |
table Partition | |
Access type | |
使用できるインデックス。クエリに関係するフィールドにインデックスがある場合、そのインデックスはリストされますが、実際にはクエリで使用されない場合があります。このフィールドが null であってもフィールド キーが null ではない場合、この状況は、検索時に使用できるセカンダリ インデックス ツリーがないことを意味しますが、セカンダリ インデックスにはクエリが必要なフィールドが含まれているため、クラスター化インデックス (クラスター化インデックス) ) は検索されなくなりました。クラスター インデックスは比較的大きい)、代わりにセカンダリ インデックス ツリーがスキャンされます (セカンダリ インデックス ツリーは比較的小さい)。このとき、一般的なアクセス タイプはインデックスであり、インデックス ツリー全体がスキャンされます。 。 | |
実際のスキャンに使用されるインデックス。 null の場合、インデックスは使用されません。クエリでカバー インデックスが使用されている場合、インデックスはキー リストにのみ表示されます。 | |
が使用されます。インデックス内のバイト数。クエリで使用されるインデックスの長さは、この列を通じて計算できます。精度を損なうことなく、長さは短いほど良いです。key_len によって表示される値は、実際に使用される長さではなく、インデックス フィールドの可能な最大長です。つまり、key_len はテーブルに基づきます。定義はテーブルから取得されるのではなく、計算されます。 | |
は、インデックスのどの列が使用されるかを示します。可能であれば、これは定数であり、インデックス列の値を検索するために使用される列または定数です; | |
テーブルの統計とインデックスの選択によると、必要なレコードを見つけるために読み取る必要がある行数を大まかに見積もります。 | |
検索条件でフィルタリングした後に残っているデータの割合。 | |
他の列には収まらない重要な追加情報が含まれます |
(1)id
select ステートメント クエリのシーケンス番号 (一連の数値を含む)。select が実行されることを示します。クエリ句または操作テーブルの順序には、次の 3 つの状況があります。
説明 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id は異なります | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#ID は同じですが異なり、存在します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
simple | |
---|---|
primary | クエリに複雑なサブクエリが含まれている場合、最も外側のクエリがマークされます; |
subquery | サブクエリは select または where リストに含まれています; |
依存サブクエリ | サブクエリの最初の SELECT は外部クエリに依存します。つまり、サブクエリは外側のクエリの結果に依存します。 |
derived | from リストに含まれるサブクエリは DERIVED (派生テーブル) としてマークされており、MySQL はこれらのサブクエリを再帰的に実行し、結果を一時テーブルに格納します。 ; |
union | 2 番目の select が Union の後に出現する場合は、union としてマークされます。union が from 句のサブクエリに含まれる場合、外側の層の select DERIVED としてマークされます; |
union result | union テーブルから選択クエリの結果を取得します (つまり、union マージされた結果セット); |
meterized | マテリアライズド テーブル。サブクエリがクエリに関連付けられている場合、サブクエリの結果はマテリアライズされた一時テーブルに格納され、次に、一時テーブル内のデータ。 |
#依存ユニオン | UNION の 2 番目以降のクエリ ステートメントは外部クエリに依存します |
(3) table |
#タイプ名
説明
# #> | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
N | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<subquery>N</subquery>
| >この行は、実体化されたサブクエリを持つ行の結果 ID の値 N を参照します。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
値の名前 | 説明 | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CHAR(n) | n バイト長 | ||||||||||||||||||||||||||
##VARCHAR(n) |
の場合utf8 エンコードの場合は 3 n 2 バイト、utf8mb4 エンコードの場合は 4 n 2 バイトです。 | #数値型 | |||||||||||||||||||||||||
1バイト | |||||||||||||||||||||||||||
SMALLINT | 2 バイト|||||||||||||||||||||||||||
MEDIUMINT | 3 バイト|||||||||||||||||||||||||||
INT | 4 バイト |||||||||||||||||||||||||||
8 バイト |
時間タイプ | ||||||||||||||||||||||||||
3バイト | |||||||||||||||||||||||||||
4 バイト |
|||||||||||||||||||||||||||
#8 バイト |
#フィールド属性 | NULL 属性は 1 バイトを占めます。フィールドが NOT NULL の場合、そのフィールドは占有されていません。 | |||||||||||||||||||||||||
備考 | |
---|---|
このクエリ テーブル 接続タイプここから、このクエリのおおよその効率を確認できます。 | |
最終的に選択されたインデックス。インデックスがない場合、通常、このクエリの効率は非常に低くなります。 | |
このクエリの結果フィルタリングに使用されるインデックスの実際の長さ | |
estimate スキャンする必要があるレコードの数、スキャンする必要があるレコードの推定数 | 小さいほど良い|
Extra | #追加の追加情報。主に表示されるかどうかを確認するためですfilesort を使用する 、 一時ファイルを使用する これら 2 つの場合
|
一時的なものを使用する | |
を実行する場合、または | ORDER BY のすべての列がインデックスに含まれていない場合に発生します。 適切なインデックスを追加する必要があります インデックスの使用 |
テーブル全体のスキャンを避けるためにカバーインデックスを使用しますまた、テーブル内のデータを 2 回検索する必要がなく、これはより良い結果の 1 つです。 | type
Using where is a full table/ の | index
句を使用して結果のフィルタリングを完了します。 | 適切なインデックスを追加する必要があります
不可能 WHERE |
句の判定結果は常に false となり、データは選択できません (例: | where 1=0)。あまり注意する必要はありません
最適化されたテーブルの選択 |
などのクエリ、これもより良い結果の 1 つです |
| [関連する推奨事項:
以上がこの記事は、MySQL の実行計画をすばやく理解するのに役立ちます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。
