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 カウンターとコンテンツの概要

推薦する

要素タイムラインの実装

目次コンポーネント - タイムラインカスタムノードスタイルカスタムタイムスタンプコンポーネント - ...

要素のフォームコンポーネントに関する注意事項

要素フォームとコード表示詳細はエレメントフォーム公式サイトをご覧ください構造と機能の分析紹介とソース...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

MySQL 8.0 の非表示インデックスの詳細な説明

言葉MySQL 8.0 は最初のバージョンから 4 年を経てリリースされました。バージョン 8.0 ...

共有サイドバーを実装するためのネイティブJS

この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...

SeataがMySQL 8バージョンを使用できない問題を解決する方法

考えられる理由: Seata が MySQL 8 をサポートしない主な理由は、接続ドライバーがバージ...

USE DB 輻輳に対する MySQL ソリューションの詳細な説明

障害に遭遇すると、障害の根本的な原因を考えるのではなく、障害を解決する方法を考えることがよくあります...

Ubuntu での mysql のインストールと使用 (一般版)

Ubuntu のバージョンに関係なく、MySQL データベースのインストールは基本的に同じです。具...

MySQL に接続されている IP アドレスを表示する方法の例

具体的な方法:まずコマンドプロンプトを開きます。次に、[ mysql -u root -p ] コマ...

MySQLはデータ復旧を実装するためにbinlogログを使用する

MySQL binlog は MySQL ログの中で非常に重要なログであり、データベースのすべての ...

ベンダー プレフィックス: ブラウザ エンジン プレフィックスが必要なのはなぜですか?

ベンダープレフィックスとは何ですか?ベンダー プレフィックス - ブラウザー エンジン プレフィック...

JS で配列の重複排除を実装する 7 つの方法

目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....

Vue開発の一般的な手法の詳細な説明

目次$nextTick() $forceUpdate() $セット() .sync——2.3.0 以...

Linux コマンドラインでパケットをキャプチャするために tcpdump を使用するいくつかの機能

tcpdump は、ネットワークの問題のトラブルシューティングに効果的に役立つ、柔軟で強力なパケット...

MySQL GROUP_CONCAT 制限の解決

効果: GROUP_CONCAT関数は、フィールド値を文字列に連結することができます。デフォルトの区...