LoginSignup
4
2

More than 5 years have passed since last update.

基礎MySQL ~その 5~ InnoDB②

Last updated at Posted at 2016-03-15

InnoDBの内部構成

InnoDBの内部構成.png

row:
各行データ

page:
各行は16KBのPageに書き込まれる(デフォルト16KB。変更可能)

extent:
Pageは1MBづつextentとして扱われる(デフォルト64 page)

segment:
table spaceにはsegmentがあり、対応するextentが保存される

Index

テーブルへの処理を高速化するためのデータ構造

InnoDBのIndex

インデックスレコードがツリーのリーフページ内に格納される B ツリー構造

     __○__        <- ルートノード
    /     \
   ○       ○      <- ブランチノード
  /\      / \
 ○  ○    ○   ○    <- リーフノード

二分探索できるようにソートしたデータが配置される。

     __9__        <- ルートノード
    /     \
   4       15     <- ブランチノード
  /\      / \
 2  6    12  17   <- リーフノード

クラスタインデックス

データが主キーのリーフノードに格納される
テーブルに対し1つ存在する

     __○__        <- ルートノード
    /     \
   ○       ○      <- ブランチノード
  /\      / \
 ○  ○    ○   ○    <- リーフノード ここに行データが入っている

セカンダリインデックス

クラスタインデックス以外のインデックス全て
リーフノードには主キーの値が格納されている

     __○__        <- ルートノード
    /     \
   ○       ○      <- ブランチノード
  /\      / \
 ○  ○    ○   ○    <- リーフノード ここに主キーの値が入っている。

セカンダリインデックスを使う場合、ここで一旦主キーの値を取得し、
主キーのクラスタインデックスを走査する

  • Covering Index
    クエリが要求するデータが全てセカンダリIndex内ある場合、
    クラスタIndexを走査せず値を返却する

Adaptive Hash Index(AHI)(適応型ハッシュインデックス)

頻繁にアクセスされるインデックスのページに応じて
メモリ内に構築されるハッシュインデックス
キー値に対する値を取得する際に使用される。
(= または <=> 演算子を使用する等価比較にのみ使用される)
Indexの走査を行わないため高速にアクセスできるが、
範囲検索などの場合には使用されない。

     __○__        
    /     \
   ○       ○      
  /\      / \
 ○  ○    ○   ○    
↑   ↑    ↑   ↑
□□□□□□□□□□□□□□□□□ <- adaptive hash index

適応型ハッシュインデックス
B ツリーインデックスとハッシュインデックスの比較

Change Buffer(変更バッファ)

buffer pool上に変更対象のセカンダリインデックスのページが存在しない場合、
変更は変更バッファーという特別な構造のみ記録される。
変更バッファーは定期的にマージされる

変更バッファー

圧縮テーブル

page単位で圧縮でき、データ、インデックス両方に適用される。
innodb_file_per_tableが有効
innodb_file_formatがBarracuda
の状態で、
ROW_FORMAT=COMPRESSEDを指定しテーブル作成。デフォルトで8KBに圧縮される。
KEY_BLOCK_SIZEでサイズ調整も可能。
zlibライブラリにより圧縮されているとのこと。

sql
CREATE TABLE `test` (
  id int ,
  name varchar(128),
  PRIMARY KEY (id)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8

InnoDB 圧縮テーブル

InnoDBの制限

InnoDBの最大Index長、数などの制限。
公式へのリンクだけ。
InnoDB テーブル上の制限

参考

漢のコンピュータ道
B-treeインデックス入門

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2