1

エンジンを MyISAM から MEMORY に変更すると、テーブル サイズが大幅に増加するのはなぜですか? 1,300 万件のレコードを含むテーブルを MEMORY に変更しようとしています。6GB のメモリがあり、Myisam ではサイズが 1.5GB で、メモリ制限に適合するように MEMORY エンジンを使用してこのサイズにしたいと考えています。

私もこれを定義しました

{tmp_table_size=5.5G
max_heap_table_size=5.5G}

それでも「テーブルがいっぱいです」というエラーが表示されるので、メモリエンジンに変換する場合、テーブルサイズは約10〜15GBである必要があると推測されます。

ありがとうございました

4

1 に答える 1

1

MEMORY (または HEAP) テーブル エンジンは、固定行形式のみをサポートします。

その結果、VARCHAR(255)列は のように格納されCHAR(255)ます。10 文字しか含まれていない場合でも、各行で 255 バイトを消費し、さらにメタデータ (長さの格納など) 用に数バイトを消費します。列が UTF-8 の場合、文字ごとに 3 バイト、つまり行ごとに 3*255 とメタデータを消費します。

https://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.htmlで MEMORY テーブルの物理的特性を参照してください。

MEMORY テーブルは、固定長の行ストレージ形式を使用します。VARCHAR などの可変長型は、固定長を使用して格納されます。

于 2013-05-31T16:02:17.037 に答える