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 番目のインデックスを使用して並べ替えを行い、並べ替えが完了するまで同様に繰り返します。(これは左端のプレフィックスルールの原則でもあります)