14

mysql でテーブルのインデックスを作成すると、index_type が type であることがわかりBTREEます。今、私はbtree(s)について理解していますが、それがどのようにインデックスを格納し、データベースがこれに基づいてレコードを検索するかを静かに理解していません。

つまり、btree は、データベースが大きなデータ ブロックの読み取りと書き込みを実行するのに優れていますPrimary key。根っ子。

では、ツリーの下の主キーのみを格納するのIDでしょうか、それとも主キーに関連付けられたデータ全体を格納するのでしょうか?

必要なプライマリ ID を見つけた後、データベースはどのようにレコードを抽出しますか?

4

2 に答える 2

25

データベースは、インデックス化された値をB-Treeキーとして格納し、レコード ポインタをB-Tree値として格納します。

インデックス付きの列の特定の値を保持するレコードを検索するときはいつでも、エンジンは でこの値を保持するキーを見つけ、B-Treeレコードへのポインタを取得してレコードをフェッチします。

「レコード ポインタ」とは正確には、ストレージ エンジンによって異なります。

  • ではMyISAM、レコード ポインタはMYIファイル内のレコードへのオフセットです。

  • ではInnoDB、レコード ポインタは の値ですPRIMARY KEY

ではInnoDB、テーブル自体はキーとして を持つB-Treeです。これは、「クラスター化インデックス」または「インデックス構成テーブル」と呼ばれるものです。この場合、他のすべてのフィールドは値として格納されます。PRIMARY KEYB-TreeB-Tree

ではMyISAM、レコードは特別な順序なしで保存されます。これは「ヒープストレージ」と呼ばれます。

于 2010-03-02T11:19:23.467 に答える