3

1 つのフィールドがロングテキストであるかなり大きな mysql データベース テーブルがあり、このフィールドで圧縮を使用したいのですが、これによりディスク容量が削減されますか? または、ストレージ スペースが既に割り当てられており、スペースが削減されません。ストレージ エンジンは innodb です。

4

1 に答える 1

4

InnoDB 圧縮行フォーマットには、いくつかの前提条件があります。

  1. innodb_file_format=Barracudamy.cnf ファイルに。

  2. innodb_file_per_tablemy.cnf ファイルに。圧縮は、中央のテーブルスペース (ibdata1) に格納されているテーブルでは機能しません。

  3. 圧縮形式を使用するようにテーブルを変更します。

    ALTER TABLE MyTable ROW_FORMAT=COMPRESSED
    

次に、テーブルを圧縮形式で保存する必要があり、必要なスペースが少なくなります。
圧縮率は、データによって異なります。

注: ibdata1 中央テーブルスペースに格納されたテーブルがあり、そのテーブルを file-per-table に再構築した場合、ibdata1 は縮小されません! ibdata1 を縮小する唯一の方法は、すべての InnoDB データ をダンプし、MySQL をシャットダウンし、テーブルスペースを rm し、MySQL を再起動して、データをリロードすることです。


あなたのコメントについて:

いいえ、クエリの実行方法を変更する必要はありません。

はい、長い時間がかかります。どのくらいの時間かは、システムによって異なります。最初は小さいテーブルで試してみて、感触をつかむことをお勧めします。

書き込み時に圧縮し、読み取り時に解凍するために、CPU リソースを消費する必要があります。データベース サーバーに余分な CPU リソースがあるのはよくあることです。データベースは通常、I/O によって制約を受けます。ただし、速度がボトルネックになる可能性があります。繰り返しますが、システム、データ、および使用状況によって異なります。ネットで勝てるかどうか、慎重にテストすることをお勧めします。

于 2013-02-11T23:48:14.110 に答える