MySQL のテーブルリターンとインデックスカバレッジの例の詳細な説明

MySQL のテーブルリターンとインデックスカバレッジの例の詳細な説明

インデックスタイプ

クラスター化インデックス: リーフ ノードには行レコードが格納され、各テーブルには少なくとも 1 つのクラスター化インデックスが必要です。クラスター化インデックス クエリを使用すると、行レコードを直接見つけることができるため、非常に高速になります。通常のインデックス: セカンダリ インデックス、クラスター化インデックス以外のインデックス、つまり非クラスター化インデックス。通常のインデックスのリーフノードには、主キー(クラスター化インデックス)の値が格納されます。

クラスター化インデックスの再帰ルール:

  • テーブルに主キーがある場合、主キーはクラスター化インデックスになります。
  • テーブルに主キーがない場合、デフォルトでは最初の NOT NULL かつ一意 (UNIQUE) の列がクラスター化インデックスとして使用されます。
  • 上記のいずれも指定されていない場合は、デフォルトでクラスター化インデックスとして非表示の row_id が作成されます。

インデックス構造

id は主キーであるため、クラスター化インデックスであり、そのリーフ ノードには対応する行レコードのデータが格納されます。

非クラスター化インデックス

クラスター化インデックスクエリ

クエリ条件が主キー (クラスター化インデックス) である場合、クラスター化インデックスを通じて検索される行レコード データを見つけるために、B+ ツリーを 1 回スキャンするだけで済みます。

たとえば、 select * from user where id = 1;

非クラスター化インデックスクエリ

クエリ条件が共通インデックス (非クラスター化インデックス) の場合、B+ ツリーを 2 回スキャンする必要があります。最初のスキャンでは、共通インデックスを通じてクラスター化インデックスの値を検索し、2 回目のスキャンでは、クラスター化インデックスの値を通じて検索する行レコード データを検索します。

たとえば、 select * from user where age = 30;

1. まず、共通インデックスage=30を通じて主キー値id=1を見つけます。
2. 次に、クラスター化インデックス id=1 を通じて行レコードデータを検索します。

まず、通常のインデックスの値を通じてクラスター化インデックスの値を検索し、次にクラスター化インデックスの値を通じて行レコード データを検索します。インデックス B+ ツリーを 2 回スキャンする必要があり、インデックス ツリーを 1 回スキャンするよりもパフォーマンスが低下します。

インデックスカバー

SQL に必要なすべての列データは、テーブルに戻らずに 1 つのインデックス ツリーで取得できるため、高速になります。

たとえば、 select id,age from user where age = 10;

ID、年齢、名前を使用してクエリを実行します。

age = 10 のユーザーから id、age、name、salary を選択します。
分析の説明: age は共通インデックスですが、name 列はインデックス ツリーにありません。そのため、age インデックスを介して id と age の値を照会した後、テーブルに戻って name の値を照会する必要があります。 Extra 列の Using where は、テーブル クエリが実行されることを示します。

タイプ: all、テーブル全体のスキャンを示す

テーブルに結合インデックスを追加します: CREATE INDEX idx_user_name_age_salary ON mydb.user (name, age, salary);

分析を説明します。この時点で、フィールド age と name は複合インデックス idx_age_name です。クエリされたフィールド id、age、name の値は、インデックス ツリー内にあります。複合インデックス B+ ツリーを 1 回スキャンするだけで済みます。このようにしてインデックス カバレッジが実現されます。この時点で、Extra フィールドは Using index になっており、インデックス カバレッジが使用されていることを意味します。

ページネーションクエリ(インデックスを使用しない):

インデックスを追加すると、それを使用してすばやく検索できるようになります。

要約する

これで、MySQL のテーブル リターンとインデックス カバレッジに関するこの記事は終了です。MySQL のテーブル リターンとインデックス カバレッジに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL テーブルを返すとインデックスが無効になるケースの説明
  • MySQLはカバーインデックスを使用してテーブルリターンを回避し、クエリを最適化します。
  • インデックスとテーブルリターンをカバーするMySQLの使い方
  • MySQLテーブルはパフォーマンスにどの程度のダメージを与えるか

<<:  HTML の blockquote タグの使用と美化

>>:  CSS カウンターとコンテンツの概要

推薦する

MySQL データ定義言語 DDL の基本ステートメント

MySQL DDL ステートメントDDL、DMLとは何ですか。 DDL はデータ定義言語であり、CR...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

SQL ファジー クエリ レポート: ORA-00909: パラメータの数が無効です。解決策

あいまいクエリにOracleデータベースを使用する場合、コンソール エラーは次の図に表示されます。理...

ウェブデザインにおける2種類のタブアプリケーション

現在、Web デザインではタブが広く使用されていますが、一般的に次の 2 つのタイプに分けられます。...

vue ディレクティブ v-bind の使用と注意点

目次1. v-bind: 要素の属性にデータをバインドできる2. v-bind: は次のように省略で...

MySQL における IF()、IFNULL()、NULLIF()、および ISNULL() 関数の使用に関する詳細な説明

MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...

Reactでのイベントバインディングの実装は3つの方法を指しています

1. 矢印関数1. 矢印関数自体はこれをバインドしないという事実を利用します。 2. render(...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

Docker Compose を使用して ELK を迅速にデプロイする (テスト済みで効果的)

目次1. 概要1.1 定義1.2 機能説明2. ELKを展開する2.1 ディレクトリとファイルを作成...

Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

目次1. 問題の説明2. 原因分析3. 解決策4. 処理1. 問題の説明調整センターでは、最後の 2...

MySQLの日付と時刻関数の使用の概要

この記事はMySQL 8.0に基づいていますこの記事では、日付と時刻の操作のための MySQL 関数...

JavaScriptはスタック構造の詳細なプロセスを実装する

目次1. スタック構造を理解する2. スタック構造のカプセル化3. 10進数を2進数に変換する1. ...

nginx リクエスト ヘッダー データ読み取りプロセスの詳細な説明

前回の記事では、nginx がリクエスト ラインのデータを読み取って、リクエスト ラインを解析する方...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...