5

MySQL にライブ チャット用の MEMORY テーブルがあり (これはこれに最適なテーブル タイプではないのでしょうか?)、毎晩行を削除してチャット ログを管理しやすくすると、テーブルにオーバーヘッドが生じます。ただし、MEMORY テーブルに対して OPTIMIZE を実行することはできないため、オーバーヘッド (Data_freeshow table status) をどのように取り除くのでしょうか?

4

1 に答える 1

4

どうやってオーバーヘッドを取り除くのですか?

MEMORY / HEAPストレージエンジンを使用してテーブルを強制的に変更すると、削除された行から失われた残りのスペースを回復できますが、何も変更しません。例えば

ALTER TABLE my_table ENGINE=MEMORY;

テーブルを書き換えます。ドキュメントからの引用でそれをバックアップします:

削除された行によって使用されていたメモリを解放するには、ALTER TABLE ENGINE=MEMORYを使用してテーブルを強制的に再構築します。

編集

多分これはこれに最適なテーブルタイプではありませんか?

私の意見では、MEMORYテーブルの理想的なアプリケーションのようには思えません。概して、これはレガシーエンジンだと思います。いくつかの思考の糧

まず、MEMORYテーブルはbツリーインデックス(ハッシュインデックスのみ)を使用できない/使用しないため、順序付けまたは範囲指定(つまり、<、>操作)にインデックスを使用できるクエリは、手動/徹底的に並べ替え/フィルタリングに頼ります。

次に、innodb_buffer_poolが十分に大きい場合、InnodbテーブルはRAMに常駐し、並行スレッドでより適切に機能するため、ほとんどのアプリケーションでMEMORYテーブルと同等かそれ以上のパフォーマンスを発揮することがよくあります。

第三に、おそらく最も重要なことは、MySQLがオフになっていると、テーブル内のすべてのデータが失われることです。レプリケーションを使用している場合にも、テーブルの切り捨てが影響します。

于 2011-01-01T20:17:55.320 に答える