MySQL 5.1 リファレンスマニュアル :: 13 ストレージエンジンとテーブルタイプ :: 13.5 InnoDB ストレージ エンジン :: 13.5.13 InnoDB テーブルとインデックス構造
« 13.5.12 マルチバージョンの実装

13.5.13.1 インデックスの物理構造 »
Section Navigation      [Toggle]
  • 13.5 InnoDB ストレージ エンジン
  • 13.5.1 InnoDB 概要
  • 13.5.2 InnoDB 連絡先情報
  • 13.5.3 InnoDB 設定
  • 13.5.4 InnoDB 起動オプションとシステム変数
  • 13.5.5 InnoDB テーブルスペースを作成する
  • 13.5.6 InnoDB テーブルの作成と利用
  • 13.5.7 InnoDB データとログ ファイルの追加と削除
  • 13.5.8 InnoDB データベースのバックアップと復旧
  • 13.5.9 InnoDB データベースを別のマシンに移動する
  • 13.5.10 InnoDB トランザクション モデルとロック
  • 13.5.11 InnoDB パフォーマンス チューニング ヒント
  • 13.5.12 マルチバージョンの実装
  • 13.5.13 InnoDB テーブルとインデックス構造
    • 13.5.13.1 インデックスの物理構造
    • 13.5.13.2 挿入バッファ
    • 13.5.13.3 適応ハッシュ インデックス
    • 13.5.13.4 物理的なレコード構造
  • 13.5.14 InnoDB ファイル領域の管理とディスク I/O
  • 13.5.15 InnoDB エラー処理
  • 13.5.16 InnoDB テーブル上の制約
  • 13.5.17 InnoDB トラブルシューティング

13.5.13. InnoDB テーブルとインデックス構造

[+/-]

13.5.13.1. インデックスの物理構造
13.5.13.2. 挿入バッファ
13.5.13.3. 適応ハッシュ インデックス
13.5.13.4. 物理的なレコード構造

MySQL は .frm ファイル内のテーブルのデータ ディレクトリ情報をデータベース ディレクトリに格納します。これは全ての MySQL ストレージ エンジンに言える事です。しかし全ての InnoDB テーブルもテーブルスペースの内側にある InnoDB 内部データ ディレクトリ内にそれ自体のエントリを持っています。MySQL がテーブルやデータベースをドロップする時、それは .frm ファイルと InnoDB データ ディレクトリ内の対応するエントリの両方を削除する必要があります。これが、単に .frm ファイルを移動するだけで InnoDB テーブルをデータベース間で移動する事ができない理由です。

全ての InnoDB テーブルは、行のデータが格納されている clustered index と呼ばれる特別なインデックスを持っています。もし PRIMARY KEY をテーブル上で定義したら、主キーのインデックスは集合インデックスになります。

もしテーブルに PRIMARY KEY を定義しなければ、MySQL は主キーとして NOT NULL カラムだけを持つ最初の UNIQUE インデックスを選択し、InnoDB がそれを集合インデックスとして利用します。もしテーブル内にそのようなインデックスがなければ、InnoDB は、行が InnoDB がそのようなテーブル内の行に割り当てた行 ID によってオーダされる集合インデックスを内部的に生成します。行 ID は、新しい行が挿入されると単調に増加する6バイトのフィールドです。従って、行 ID によってオーダされた行は物理的に挿入順になっています。

行データはインデックス サーチが導く物と同じページ上にあるので、集合インデックスを通しての行へのアクセスは速いです。テーブルが大きいと、集合インデックス構造は従来の解決法と比較して、ディスク I/O を節約する事が多いです。(多くのデータベース システムでは、データの格納はインデックス レコードからの別のページを利用しています。)

InnoDB では、非集合インデックス(セカンダリ インデックスとも呼ばれる)内のレコードは、行に対して主キー値も含んでいます。InnoDB は、この主キー値を集合インデックスから行を検索するのに利用します。もし主キーが長いと、セカンダリ インデックスがより多くの領域を利用する事に注意して下さい。

InnoDB は、短い方の文字列の残りの長さが領域で詰められたかのように扱われるように、長さの異なる CHAR と VARCHAR 文字列を比較します

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates