Mysql チューニング: Mysql インデックスの基礎となるデータ構造とアルゴリズムについての深い理解

1. インデックス作成の性質

インデックスは、Mysql がデータを効率的に取得するのに役立つ順序付けされたデータ構造です。Mysql インデックスの基礎となるデータ構造は B+ ツリーを使用します
ここに画像の説明を挿入します

  • B+ ツリーのノードはページに格納され、ページのサイズは約 16KB
  • 非リーフ ノードにはデータは格納されず、インデックスのみが格納されます (冗長)。さらに多くのインデックスを配置できます。
  • リーフノードにはすべてのインデックスフィールドが含まれます
  • リーフ ノードはポインターで接続され、インターバル アクセスのパフォーマンスが向上します。
show global status like 'innodb_page_size';

ここに画像の説明を挿入します

データベースのテーブルとファイルの対応

ここに画像の説明を挿入します

2.インデックスの実装

MyISAM ストレージ エンジンのインデックスの実装
ここに画像の説明を挿入します

インデックスは MYI ファイル、MYD ファイルに配置され、MyISAM インデックス ファイルとデータ ファイルは分離されます。(MyISam の主キーは非クラスター化インデックスです)

InnoDB ストレージ エンジンのインデックスの実装

  • テーブル データ ファイル (ibd) ファイル自体は、B+ ツリーに従って編成されたインデックス構造ファイルです。
  • クラスター化インデックス - リーフ ノードが完全なデータ レコードを保護
  • InnoDB テーブルで主キー ( 由InnoDB下数据的存储情况就可以知道为什么要建立索引) を確立する必要があり、整数の自動インクリメント インデックス ( 整型索引在排序和存储方面都有优势,自增索引在构建B+树时可以减少结点分裂操作的次数,提高B+树构建的效率)を推奨する理由
  • 主キー以外のすべてのリーフ ノードが、データ自体ではなく主キーの値を格納するのはなぜですか?
    回答: データの整合性とストレージ容量の節約のためです。

ここに画像の説明を挿入します

3. ジョイントインデックス (実際にはより一般的に使用されます)

共用体インデックス構造ここに画像の説明を挿入します

基礎となるジョイントインデックスはどのようにソートされますか?
回答: インデックスが作成された順に並べ替えられます。最初のフィールドが並べ替えられる場合、後続のフィールドは考慮する必要はありません。同じ最初のインデックス列を持つデータが複数ある場合、データは並べ替えられます。次に、2 番目のインデックスを使用して並べ替えを行い、並べ替えが完了するまで同様に繰り返します。(これは左端のプレフィックスルールの原則でもあります)

おすすめ

転載: blog.csdn.net/qq_43456605/article/details/133070554