6

次のサイズの 4 つの列を持つ MySQL の単純なテーブルを見ています。

unsigned bigint (8 bytes)
unsigned bigint (8 bytes)
unsigned smallint (2 bytes)
unsigned tinyint (1 byte)

したがって、1行あたり19バイトになると予想されます。

このテーブルには 1,654,150 行あるため、データのサイズは 31,428,850 バイト (または約 30 メガバイト) になります。

しかし、phpMyAdmin を介して、データが 136.3 MiB を占めていることがわかります ( bigint 1, smallint, tinyint79 MiB のインデックスのサイズは含まれません)。

ストレージ エンジンは InnoDB で、主キーはbigint 1, bigint 2(ユーザー ID と一意のアイテム ID) です。


編集:コメントで要求されたように、これがaの結果ですSHOW CREATE TABLE storage

CREATE TABLE `storage` (
 `fbid` bigint(20) unsigned NOT NULL,
 `unique_id` bigint(20) unsigned NOT NULL,
 `collection_id` smallint(5) unsigned NOT NULL,
 `egg_id` tinyint(3) unsigned NOT NULL,
 PRIMARY KEY (`fbid`,`unique_id`),
 KEY `fbid` (`fbid`,`collection_id`,`egg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
4

3 に答える 3

2

インデックスには、ディスク上に独自のテーブルがあります (ただし、それらを直接「見る」ことはできません)。データベースの合計サイズは、テーブルとインデックス テーブルのサイズです。

走る

show create table <tablename>;

定義されたインデックスを確認できます。テーブルの合計サイズと、主キーの 2 つの列で構成されるテーブルを追加することを想像してください。追加されたものは、あなたが見ているサイズになります。

于 2012-07-17T16:28:03.597 に答える
2

テーブルが頻繁に挿入/削除/更新を行っている場合は、OPTIMIZE TABLEクエリを実行して、テーブルがどれだけ縮小できるかを確認してください。データ ファイルに最適化と未使用のスペースがある可能性があります。

phpmyadmin が示すデータ サイズは、ここで期待したものではありません。初めてテーブルを作成したときに、データ使用量が表示されないことがわかります: 0. 16KB または 32KB などになります。また、レコードを挿入してもサイズは変わりません。これが、innoDB が考えるほど効率的にテーブル ファイルを制御する方法です。

SHOW TABLE STATUS FROM {db_name}テーブルの各行の Avg_row_length がどれくらいかを確認します。19バイトにもなりません

于 2012-07-17T16:38:37.437 に答える