MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテーブル圧縮を有効にする方法

圧縮テーブルを作成する前に、innodb_file_per_table設定オプションが有効になっており、innodb_file_formatがBarracudaに設定されていることを確認しましょう。これらのパラメータは、MySQLの設定ファイル(my.cnf または my.ini)で確認・設定できるほか、MySQLサーバーをシャットダウンすることなくSETステートメントを使って動的に変更することも可能です。

テーブルの圧縮を有効にするには、CREATE TABLEまたはALTER TABLEステートメントでROW_FORMAT=COMPRESSED句、KEY_BLOCK_SIZE句、またはその両方を指定します。

それでは、圧縮テーブルを作成するステートメントの例を見てみましょう。

クエリ例

SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_file_format=Barracuda;
CREATE TABLE t1
(c1 INT PRIMARY KEY)
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;

各句の指定方法と挙動

  • ROW_FORMAT=COMPRESSEDを指定した場合、KEY_BLOCK_SIZEは省略できます。このときはデフォルトのページサイズ値が使用され、これはinnodb_page_size値の半分に相当します。
  • 逆にKEY_BLOCK_SIZEを指定した場合は、ROW_FORMAT=COMPRESSEDを省略でき、圧縮は自動的に有効になります。
  • KEY_BLOCK_SIZEの最適な値を決定するには、この句に異なる値を指定した同じテーブルのコピーを複数作成します。そのうえで、生成された.ibdファイルのサイズを測定し、実際のワークロード下でそれぞれがどの程度のパフォーマンスを発揮するかを確認するのがおすすめです。
  • KEY_BLOCK_SIZE値はあくまでヒントとして扱われます。innodb_strict_mode=ONの場合、無効なKEY_BLOCK_SIZE値を指定するとエラーが返されます。
  • InnoDBデータページの非圧縮時のデフォルトサイズは16KBです。オプション値の組み合わせに応じて、MySQLはテーブルの.ibdファイルに対して1KB、2KB、4KB、8KB、16KBのいずれかのページサイズを使用します。
  • 実際の圧縮アルゴリズムは、KEY_BLOCK_SIZE値の影響を受けません。
  • クラスタインデックスを含むテーブルのすべてのインデックスは、CREATE TABLEまたはALTER TABLEステートメントで指定された同じページサイズで圧縮されます。なお、ROW_FORMATKEY_BLOCK_SIZEといったテーブル属性は、InnoDBテーブルに対するCREATE INDEX構文の一部とはみなされないため、指定しても無視されます。
  1. MySQLテーブルに重複しない値を挿入する方法(UNIQUE制約の使い方)

    MySQLのテーブルに重複する値の挿入を防ぎたい場合、UNIQUE制約を使用します。UNIQUE制約を設定したカラムには、同じ値(または同じ組み合わせの値)を2回以上登録できず、重複データの混入を自動的に防止できます。 1. UNIQUE制約付きテーブルを作成する まず、FirstNameとLastNameの組み合わせが重複しないようにUNIQUE制約を設定したテーブルを作成します。 mysql> create table DemoTable832( FirstName varchar(100), LastName varchar(100), UNIQUE(Fir

  2. MySQLでテーブルのフィールド数(カラム数)を取得する方法

    MySQLでテーブルのフィールド数を確認するには MySQLでテーブルに含まれるフィールド(カラム)の数を表示するには、COUNT(*)を使用します。システムテーブルであるINFORMATION_SCHEMA.COLUMNSを参照することで、特定のテーブルのカラム情報を取得できます。 基本構文 フィールド数を取得するための基本構文は以下のとおりです。 SELECT COUNT(*) AS 任意の別名 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = テーブル名 AND TABLE_SCHEMA = データベース名; table_nameに