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_FORMATやKEY_BLOCK_SIZEといったテーブル属性は、InnoDBテーブルに対するCREATE INDEX構文の一部とはみなされないため、指定しても無視されます。
-
MySQLテーブルに重複しない値を挿入する方法(UNIQUE制約の使い方)
MySQLのテーブルに重複する値の挿入を防ぎたい場合、UNIQUE制約を使用します。UNIQUE制約を設定したカラムには、同じ値(または同じ組み合わせの値)を2回以上登録できず、重複データの混入を自動的に防止できます。 1. UNIQUE制約付きテーブルを作成する まず、FirstNameとLastNameの組み合わせが重複しないようにUNIQUE制約を設定したテーブルを作成します。 mysql> create table DemoTable832( FirstName varchar(100), LastName varchar(100), UNIQUE(Fir
-
MySQLでテーブルのフィールド数(カラム数)を取得する方法
MySQLでテーブルのフィールド数を確認するには MySQLでテーブルに含まれるフィールド(カラム)の数を表示するには、COUNT(*)を使用します。システムテーブルであるINFORMATION_SCHEMA.COLUMNSを参照することで、特定のテーブルのカラム情報を取得できます。 基本構文 フィールド数を取得するための基本構文は以下のとおりです。 SELECT COUNT(*) AS 任意の別名 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = テーブル名 AND TABLE_SCHEMA = データベース名; table_nameに