次のようにすべての
        InnoDB
        は、行のデータが格納される「クラスタインデックス」と呼ばれる特別なインデックスを持っています。
      
            テーブルで PRIMARY
            KEY
            が定義されている場合、InnoDB
            はそれをクラスタインデックスとして使用します。
          
            もしテーブルに PRIMARY
            KEY を定義しなければ、MySQL
            は主キーとして NOT
            NULL カラムだけを持つ最初の
            UNIQUE
            インデックスを選択し、InnoDB
            がそれをクラスタインデックスとして利用します。
          
            テーブルに PRIMARY
            KEY も適切な
            UNIQUE
            インデックスも存在していない場合には、InnoDB
            の内部で、行 ID
            値を含む合成カラム上に隠しクラスタインデックスが生成されます。そのようなテーブルでは、InnoDB
            が行に割り当てる ID
            に基づいて行の順序付けが行われます。行 ID
            は、新しい行が挿入されると単調に増加する
            6 バイトのフィールドです。従って、行 ID
            によってオーダされた行は物理的に挿入順になっています。
          
        行データはインデックスサーチが導くものと同じページ上にあるので、クラスタインデックスを通しての行へのアクセスは速いです。テーブルのサイズが大きい場合にクラスタインデックスアーキテクチャーを使えば、インデックスレコードとは異なるページに行データを格納するストレージ編成を使用する場合に比べ、ディスク入出力処理の削減を図れる可能性が高くなります。(たとえば
        MyISAM
        では、データ行に使用されるファイルとインデックスレコードに使用されるファイルは異なる。)
      
        InnoDB
        では、非クラスタインデックス
        (二次インデックスとも呼ばれる)
        のレコードに行の主キーカラムが格納されますが、行は二次インデックスには含まれません。InnoDB
        は、クラスタインデックス内で行を検索するのにこの主キー値を利用します。主キーが長いと二次インデックスで使用される領域も多くなるので、主キーは短くしたほうが有利です。
      

