InnoDB テーブルはフルテキストインデックスをサポートしない。
Windows では、InnoDB がデータベース名とテーブル名を内部的に常に小文字で格納する。バイナリ形式のデータベースを Unix と Windows の間で移動するには、すべてのテーブル名とデータベース名を小文字にする必要がある。
警告: MySQL
システムテーブル(mysql
データベースの配下のテーブル)を MyISAM から
InnoDB
に変換してはならない。この変換はサポートされていない。変換してしまうと、バックアップから以前のシステムテーブルをリストアするか、mysql_install_db
スクリプトでシステムテーブルを再構築しない限り、MySQL
を再起動できなくなる。
SHOW TABLE STATUS
から返される
InnoDB
テーブルの統計情報は、テーブルが確保している物理サイズを除いて正確ではない。
レコードのカウントは、SQL
の最適化で使用される大まかな推定値に過ぎない。
カラムの先頭の一部にユニークインデックスを張ろうとすると、エラーになる。
CREATE TABLE T (A CHAR(20), B INT, UNIQUE (A(5))) TYPE = InnoDB;
カラムの先頭の一部に非ユニークなインデックスを張ると、InnoDB はそのカラム全体にインデックスを作成する。
INSERT DELAYED
は、InnoDB
テーブルではサポートされない。
MySQL の LOCK TABLES
操作では、すでに完了した SQL
ステートメントで設定された InnoDB
の行レベルロックが考慮されない。つまり、あるテーブルで他のユーザのトランザクションが行レベルロックを設定していても、そのテーブルでテーブルロックを取得できる。したがって、テーブルで実行した操作が他のユーザのロックと衝突した場合は、操作が待機状態になる可能性がある。また、デッドロックが発生する可能性もある。ただし、InnoDB
によって設定される行レベルロックでは常に完全性が配慮されているため、デッドロックによってトランザクションの完全性が損なわれることはない。
また、テーブルロックのために、他のトランザクションはテーブル上で(矛盾するロックモードで)行レベルロックを追加で取得できなくなる。
1 つのテーブルに作成できるカラムは 1,000個 までである。
DELETE FROM TABLE
ではテーブルが再生成されないが、代わりにすべてのレコードが
1
つずつ削除される。この処理はそれほど速くない。MySQL
の将来のバージョンでは、処理の速い
TRUNCATE
を使用できるようになる。
InnoDB のデフォルトのデータベースページサイズは 16 KB。コードを再コンパイルすることで、このサイズは 8 KB 〜 64 KB に設定できる。 InnoDB の 3.23.40 以下のバージョンでは、レコードの最大長がデータベースページの半分よりもやや小さい。ソースリリース 3.23.41 より、BLOB および TEXT カラムを 4 GB 未満にすることが可能となった。レコードの合計の長さも 4 GB 未満でなければならない。InnoDB は、サイズが 128 バイト以下のフィールドを個別のページに格納しない。InnoDB が長いフィールドを別のページに格納することでレコードを変更した場合、レコードの残りの長さはデータベースページの半分より小さくなければならない。キーの最大長は 7,000 バイトである。
一部のオペレーティングシステムでは、データファイルが 2 GB 未満でなければならない。ログファイルを結合した大きさは、4 GB 未満でなければならない。
テーブルスペースの最大サイズは、40 億 データベースページ。これはテーブルの最大サイズでもある。テーブルスペースの最小サイズは 10 MB。
MySQL サーバを再起動したときに、InnoDB が
AUTO_INCREMENT
カラムの古い値を再使用する場合がある。
InnoDB では、AUTO_INCREMENT
カラムの最初の値を CREATE TABLE ...
AUTO_INCREMENT=...
(または ALTER
TABLE
...
)で設定できない。最初の値を設定するには、1
を差し引いた値を持つダミーのレコードを挿入し、その後でダミーのレコードを削除する。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.