MyISAMとInnoDBストレージエンジンのインデックス実装方法の違い

一个新手
リリース: 2017-09-11 11:26:06
オリジナル
1380 人が閲覧しました

1. MyISAM インデックスの実装:

1) 主キー インデックス:

MyISAM エンジンはインデックス構造として B+Tree を使用し、リーフ ノードのデータ フィールドにはデータ レコードのアドレスが格納されます。次の図は、Myisamプライマリキーインデックスの概略図です。 ) MyISAM テーブルの。 MyISAM のインデックス ファイルにはデータ レコードのアドレスのみが保存されていることがわかります。


2) セカンダリキー

MyISAM では、プライマリ インデックスとセカンダリ インデックス (セカンダリ キー) の間に構造上の違いはありません。ただし、プライマリ インデックスではキーが一意である必要があるのに対し、セカンダリ インデックスのキーは一意である必要がある点が異なります。インデックスは繰り返すことができます。

Col2 に補助インデックスを作成すると、このインデックスの構造は次のようになります:

これも B+Tree であり、データ フィールドにはデータ レコードのアドレスが保存されます。したがって、
MyISAM のインデックス検索アルゴリズムは、まず B+Tree 検索アルゴリズムに従ってインデックスを検索し、指定された Key が存在する場合、そのデータ フィールドの値を取り出し、次にデータ フィールドの値を取得します。対応するデータレコードを読み取るためのアドレスとして使用されます。

MyISAM のインデックス作成方法は、InnoDB のクラスター化インデックスと区別するために「非クラスター化」とも呼ばれます。

2. InnoDB インデックスの実装

InnoDB もインデックス構造として B+Tree を使用しますが、具体的な実装方法は MyISAM とはまったく異なります。

1) 主キー インデックス:

MyISAM インデックス ファイルとデータ ファイルは別個であり、インデックス ファイルにはデータ レコードのアドレスのみが保存されます。 InnoDB では、テーブル データ ファイル自体は B+Tree によって編成されたインデックス構造であり、このツリーのリーフ ノード データ フィールドには完全なデータ レコードが保存されます。このインデックスのキーはデータ テーブルの主キーであるため、InnoDB テーブル データ ファイル自体が主インデックスになります。

(図 inndb プライマリ キー インデックス) は、InnoDB プライマリ インデックス (データ ファイルでもあります) の概略図であり、リーフ ノードに完全なデータ レコードが含まれていることがわかります。この種のインデックスは、クラスター化インデックスと呼ばれます。 InnoDB のデータ ファイル自体は主キーによって集約されるため、InnoDB ではテーブルに主キーが必要です (MyISAM には主キーが明示的に指定されていない場合があります)。MySQL システムはデータを一意に識別できるカラムを自動的に選択します。レコードが存在しない場合、このタイプのカラムの場合、MySQL は InnoDB テーブルの主キーとして暗黙的なフィールドを自動的に生成します。このフィールドの長さは 6 バイトで、タイプは Long です。

2). InnoDB の補助インデックス

InnoDB のすべての補助インデックスは、主キーをデータ フィールドとして参照します。たとえば、以下の図は、Col3 で定義された補助インデックスを示しています。


InnoDB テーブルは、クラスター化インデックス に基づいて構築されます。したがって、InnoDB のインデックスは、非常に高速な主キー検索パフォーマンスを提供できます。ただし、その補助インデックス (セカンダリ インデックス、つまり非主キー インデックス) には主キー列も含まれるため、主キーが比較的大きく定義されている場合、他のインデックスも大きくなります。テーブルに多数のインデックスを定義する場合は、主キーをできるだけ小さく定義するようにしてください。 InnoDB はインデックスを圧縮しません。

テキスト文字の ASCII コードが比較基準として使用されます。 クラスター化インデックスの実装により、主キーによる検索が非常に効率的になりますが、補助インデックス検索ではインデックスを 2 回取得する必要があります。まず、補助インデックスを取得して主キーを取得し、次に主キーを使用して主インデックス内のレコードを取得します。 。

さまざまなストレージ エンジンのインデックス実装方法は、インデックスの正しい使用と最適化に非常に役立ちます。たとえば、InnoDB のインデックス実装を理解すると、過度に長いフィールドを使用することが推奨されない理由が簡単に理解できます。主キー。すべての補助インデックスは主インデックスを参照するため、主インデックスが長すぎるとセカンダリ インデックスが大きくなりすぎます。別の例として、InnoDB データ ファイル自体が非単調な主キーであるため、InnoDB では非単調なフィールドを主キーとして使用することは得策ではありません。これにより、データ ファイルが B+ ツリーの特性を維持することになります。新しいレコードを挿入する場合、分割調整を頻繁に行うのは非常に効率が悪いため、自動インクリメント フィールドを主キーとして使用することをお勧めします。

InnoDB インデックスMyISAM インデックス の違い:

まず、メインのインデックスである InnoDB データ ファイル自体の違いは、インデックス ファイルです。 MyISAMのインデックスとデータは分離されています。

2 番目の違いは補助インデックスです。InnoDB の補助インデックス データ フィールドには、アドレスの代わりに、対応するレコードの主キーの値が格納されます。 MyISAM のセカンダリ インデックスとプライマリ インデックスには大きな違いはありません。

MySql インデックス アルゴリズムの原理の分析 (わかりやすい、B ツリーについてのみ話します)

以上がMyISAMとInnoDBストレージエンジンのインデックス実装方法の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート