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

推薦する

我々は自らの力でIE6を絶滅に追い込んでいる

実際、IE6 が本当にいつ消滅するのか私たちは毎日疑問に思っていますが、2001 年のリリース以来、...

JS でパブリッシュ サブスクライブ モデルを作成する

目次1. シーン紹介2 コードの最適化2.1 ファンを増やす問題を解決する2.2 作品追加の問題を解...

IdeaでTomcatを起動したときに複数のリスナーが報告される問題を解決する

エラーのスクリーンショット例外が発生した場所が見つかりません。解決策: リソースディレクトリにlog...

MySQL トリガー: トリガーの作成と使用

この記事では、例を使用して MySQL トリガーの作成と使用について説明します。ご参考までに、詳細は...

Windows 10 で MySQL の解凍バージョンをインストールする方法の詳細なグラフィック チュートリアル

MySQL のインストールは、インストール バージョンと解凍バージョンに分かれています。インストール...

MySQL クイックデータ比較テクニック

MySQL の運用と保守において、R&D の同僚が 2 つの異なるインスタンスのデータを比較...

Manjaro インストール CUDA 実装チュートリアル分析

昨年末、Thinkpad T450 のデュアルシステムの opensuse を Manjaro に置...

CSSスプライトの応用の詳細な説明

CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...

フォーム送信の更新ページはソースコード設計にジャンプしません

1. ソースコードの設計コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

VirtualBox を使用して Linux クラスターをシミュレートする方法

1. ホストMacbookにHOSTをセットアップする前回のドキュメントでは仮想マシンの静的 IP ...

Docker と Intellij IDEA の融合により、Java 開発の生産性が 10 倍向上

目次1. 開発前の準備2. 新しいプロジェクトIdea は Java 開発のための強力なツールであり...

88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

私が使用しているデータベースはMySQLデータベースバージョン5.7ですまずデータベーステーブルを自...

フローティングをクリアするいくつかの方法(推奨)

1. 同じタイプの空の要素を追加し、要素の CSS 属性 clear:both; を設定します。 ...

MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解

1. ストレージエンジン前のセクションでは、SQL 実行プランは、エグゼキュータ コンポーネントがス...