MySQL 学習チュートリアル クラスター化インデックス

MySQL 学習チュートリアル クラスター化インデックス

クラスタリングは、実際には InnoDB データベース エンジンに関連しています。したがって、インデックスをクラスタリングするときは、InnoDB と MyISAM という 2 つの MySQL データベース エンジンを使用します。

InnoDBとMyISAMのデータ分布の比較

CREATE TABLE test (col1 int NOT NULL,
     col2 int NULLではない、
     主キー(col1)、
     キー(col2));

まず、上記の SQL ステートメントを使用してテーブルを作成します。ここで、col1 は主キーであり、両方のデータ列に対してインデックスが作成されます。すると、データの主キー値は 1 ~ 10000 となり、ランダムな順序でデータベースに挿入されます。

MyISAMデータ分散

MyISAM のデータ保存ロジックは比較的単純で、データが挿入された順序でデータ テーブルを作成します。直感的には、次の図が示されます。

挿入順に「行ごとに」データが生成されていることがわかります。その前に行番号フィールドもあり、インデックスが見つかったときに行インデックスをすばやく見つけるために使用されます。

具体的な詳細を見てみましょう:

上図は、MyISAM エンジンで主キーに応じて確立されたインデックスの具体的な実装を示しています。主キーがリーフ ノードに順番に配置されている一方で、ノードにはデータベース テーブル内の主キーの特定の行番号も格納されていることがわかります。上で述べたように、この行番号はテーブル内のデータの位置をすばやく見つけるのに役立ちます。この行番号は、主キーが配置されている特定のデータ行を指すポインターとして理解することもできます。

では、col2 に基づいてインデックスを作成するとどうなるでしょうか?何か違うのでしょうか?答えはノーです。

したがって、結論としては、MyISAM で作成されたインデックスが主キー インデックスであるかどうかに実際には違いはありません。唯一の違いは、それが「主キー インデックス」であるということです。

InnoDB データ分散

InnoDB はクラスター化インデックスをサポートしているため、MyISAM でのインデックス実装は異なります。

まず、主キーに基づくクラスター化インデックスが InnoDB 上でどのように実装されるかを見てみましょう。

まず、MyISAM 上の主キー インデックスと同様に、ここでのインデックスのリーフ ノードにも主キー値が含まれ、主キー値が順番に並べられています。違いは、各リーフ ノードにトランザクション ID、ロールバック ポインター、およびその他の非主キー列の値 (ここでは col2) も含まれていることです。したがって、InnoDB 上のクラスター化インデックスは、元のテーブル内のすべての行データを主キーに従って整理し、それをインデックスのリーフ ノードに配置することがわかります。これは主キーインデックスにおける MyISAM との違いです。対応する主キー値を見つけた後、MyISAM 主キー インデックスはポインタ (行番号) を使用してテーブル内の対応するデータ行を見つける必要があります。InnoDB 主キー インデックスは、すべてのデータ情報をインデックスに格納し、インデックス内で直接検索できます。

InnoDB のセカンダリ インデックスを見てみましょう。

InnoDB の主キー インデックスとは異なり、セカンダリ インデックスはリーフ ノードにすべての行データ情報を格納するのではなく、インデックス列の値に加えて、データ行に対応する主キー情報のみを格納することがわかります。 MyISAM では、セカンダリ インデックスはプライマリ キー インデックスと同じであることがわかっています。インデックス列の値に加えて、ポインタ (行番号) 情報のみが格納されます。

2 つのエンジンのセカンダリ インデックスを比較します。つまり、ポインターを保存することと主キー値を保存することの利点と欠点です。

主キー値を最初に保存すると、ポインターのみを保存する場合よりも多くのスペース オーバーヘッドが発生します。ただし、データ テーブルが分割されたり、その他の構造変更が行われたりすると、主キー値を格納するインデックスは影響を受けませんが、ポインターを格納するインデックスを再度更新して管理する必要がある場合があります。

2 つのエンジンの 2 つのインデックスを 1 つのグラフで比較します。

要約する

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

以下もご興味があるかもしれません:
  • MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明
  • MySQL クラスター化インデックスのページ分割原理の分析例
  • MySQL のクラスター化インデックスとクラスター化インデックスの成長の仕組みを理解する

<<:  ApacheとTomcatによるクラスタ環境構築プロセスの分析

>>:  Vue3 でタイマーコンポーネントをカプセル化する方法

推薦する

MySQL マスター/スレーブ データベース同期構成と一般的なエラー

アクセス回数が増えると、時間のかかるデータベース読み取り操作では、データベースへの負荷を軽減するため...

Alpine Dockerイメージフォント問題解決操作

1. フォントを実行し、フォント フォルダーを開いて、使用するフォント ファイルを見つけます。 2....

初心者向けに Docker に Jenkins をインストールする方法を詳しく説明したチュートリアル

Jenkins はオープンソース ソフトウェア プロジェクトです。Java をベースに開発された継続...

Docker での MySQL 8.0.20 のインストールと設定のチュートリアル

Dockerは参考までにMySQLバージョン8.0.20をインストールします。具体的な内容は以下のと...

アダプティブ Web デザインを実現する方法に関する関連知識ポイントの要約

「アダプティブ Web デザイン」はどのように機能しますか?実はそれほど難しいことではありません。 ...

Vue ページ印刷で自動ページングを実装する 2 つの方法

この記事では、ページ印刷の自動ページングを実現するためのVueの具体的なコードを例として紹介します。...

Docker の MySQL コンテナのタイムゾーン問題の修正

序文Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コ...

VMware12.0 インストール Ubuntu14.04 LTS チュートリアル

私は、デスクトップ バージョンとサーバー バージョンの両方で、仮想マシンにさまざまなイメージを何度も...

Tomcat10 Catalinaのログの文字化けの問題を解決する

実行環境、Idea2020バージョン、Tomcat10、実行時にTomcat CatalinaLog...

Linuxフラッシュのインストール方法

Linuxにフラッシュをインストールする方法1. Flashの公式サイトにアクセスし、ダウンロードを...

Linux での JDK と Tomcat のアップロードと設定に関する詳細なチュートリアル

準備1. 仮想マシンを起動する2. gitツールルートアカウントでログインルートアカウントを使用して...

インターフェーステストプラットフォームを構築するためのDjango+Vue+Dockerの詳細な説明

1. 冒頭の2つの単語みなさんこんにちは。私の名前はLin Zonglinです。私はテストエンジニア...

HTMLページがincludeを使用してphpファイルをインポートした後に余分な空白行があります

インターネットで見つけた方法は効果的ですinclude によって導入されたフッター ファイルとヘッダ...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

純粋な CSS で DIV サスペンションを実装するサンプル コード (固定位置)

DIV フローティング効果 (固定位置) は CSS のみで実装されており、IE8、360、Fir...