2

一般的な 2 つの回答は、 show_table_statusINFORMATION_SCHEMA.TABLESを使用することです。

しかし、どちらも主キーのサイズをカウントしていないようです。

主キーがあり、他のインデックスがない数百万のレコードを持つテーブルがあり、上記の両方の方法Index_length: 0がそのテーブルに表示されます。テーブルは INNODB です。

4

1 に答える 1

3

主キーはテーブルです。InnoDB では、主キーに実際のデータが含まれているため、主キーにデータが含まれている場合、それはテーブルです。

ちょっと考えてみてください。InnoDB テーブルのクラスター化インデックスとセカンダリ インデックスで 2 つの異なるタイプのインデックスを取得します。違いは、クラスター化インデックスにはデータが含まれ、セカンダリ インデックスにはインデックス付きの列とデータへのポインターが含まれることです。したがって、セカンダリ インデックスにはデータが含まれているのではなく、CLUSTERED インデックス内でデータが配置されている場所が含まれています。

通常、主キーはクラスター化インデックスです。すべての値を含むテーブルと、そのすべての値を含むクラスター化インデックスの両方を格納するのは、非常に非効率的です。これにより、テーブルのサイズが実質的に 2 倍になります。

したがって、InnoDB に主キーがある場合、テーブル サイズは主キーのサイズになります。一部のデータベース システムでは、セカンダリ インデックスを主キーとして、別のインデックスをクラスター化されたキーとして持つことができますが、InnoDB ではこれが許可されていません。

詳細については、次のリンクを参照してください。

http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.html

http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

これらのリンクでは、私が上で述べたことすべてをより詳細に説明しています。簡単に言えば、テーブルのサイズであるため、主キーインデックスのサイズが既にあります。

それが役立つことを願っています。

于 2013-01-17T09:33:53.130 に答える