MySQLのHEAPテーブル


5.0からHEAPテーブルでも可変長レコードがサポートされたのだが(BLOBとTEXTは未サポート)、VARCHARでフィールド作っても固定でメモリを食われている気がする…まだちゃんと調べてないけど。

とりあえず、MySQLのデフォルト文字コードをUTF-8にしている場合、HEAPテーブルを使う際には注意が必要だと言うことはわかった。注意が必要って言うか、要はテーブルとフィールドのデフォルト文字コードに気をつけようって言うだけ。日本語を扱わないのであれば、UTF-8のまま使っているとメモリをかなり喰う。30バイト以内のランダムな文字列 + URL、っていうテーブルをHEAPで使っていたのだが、最初はテーブルの定義をVARCHAR(100) + VARCHAR(2048)とかにしていたら、show table statusするとAvg_row_lengthが5kとかになっていた。それをVARCHAR(30) + VARCHAR(512)に変えると2kくらいに減少。ALTER TABLEでテーブルとフィールドの文字コードをUTF-8からASCIIに変えてあげたら550バイトくらいまで小さくなった。やっぱ日本語が絶対に入らないとわかっているのなら、UTF-8を使うのはメモリ(ディスク)の無駄だ。拡張性はあるんだけど、URLとかidとかはASCIIで済むのだから。