MySQL
バージョン 3.22
では、テーブルのサイズは 4 GB(4
ギガバイト)に制限されていました。MySQL
バージョン 3.23 の MyISAM
テーブル型では、テーブルの最大サイズが
800万テラバイト(2^63
バイト)に増えました。有効なテーブルのサイズがこのように大きくなったことで、現在では、MySQL
データベースに効果的なテーブルの最大サイズは通常、MySQL
内部の制限ではなく、オペレーティングシステムのファイルサイズに関する制限によって決まります。
次の表は、オペレーティングシステムのファイルサイズに関する制限の例を示しています。
オペレーティングシステム | ファイルサイズの制限 |
Linux-Intel 32-bit | 2 GB、LFS 使用の場合はそれ以上 |
Linux-Alpha | 8 TB(?) |
Solaris 2.5.1 | 2 GB(パッチにより 4GB まで可) |
Solaris 2.6 | 4 GB(フラグにより変更可能) |
Solaris 2.7 Intel | 4 GB |
Solaris 2.7 UltraSPARC | 512 GB |
Linux 2.2 では、ext2 ファイルシステム用の LFS パッチを使用することで、2 GB より大きいサイズのテーブルを使用することができます。また、Linux 2.4 には ReiserFS および ext3 が組み込まれており、これらを使用することで大きいファイルがサポートされます。現在の Linux ディストリビューションのほとんどはカーネル 2.4 に基づいており、必要な Large File Support(LFS)パッチすべてがすでに組み込まれています。しかし、それでも、有効な最大ファイルサイズはいくつかの要因によって左右されます。そのうちの 1 つが、MySQL テーブルを格納するために使用されるファイルシステムです。
Linux における LFS の詳細については、Andreas Jaeger の「Large File Support in Linux」(http://www.suse.de/~aj/linux_lfs.html)を参照してください。
デフォルトでは、MySQL
では有効な最大サイズが約 4 GB
の内部構造を持つ MyISAM
テーブルが作成されます。SHOW TABLE
STATUS
コマンドまたは myisamchk -dv
table_name
を使用して、テーブルの最大サイズをチェックすることができます。
See 項4.6.8. 「SHOW
構文」。
4 GB
より大きいサイズのテーブルが必要な場合(オペレーティングシステムで大規模ファイルがサポートされていれば)、CREATE
TABLE
ステートメントで
AVG_ROW_LENGTH
および
MAX_ROWS
オプションを指定することができます。4 GB
を超えるテーブルを作成するには、これらのオプションを使用してください。See
項6.5.3. 「CREATE TABLE
構文」。また、ALTER
TABLE
を使用して、後でこれらのオプションを設定することもできます。
See 項6.5.4. 「ALTER TABLE
構文」。
MyISAM
テーブルのファイルサイズに関する制限に対処する方法として、他に次のような方法があります。
読み込み専用の大規模テーブルの場合、myisampack
を使用してテーブルを圧縮することができる。myisampack
では通常、テーブルが少なくとも 50%
圧縮されるので、結果的にはるかに大きいテーブルを使用することが可能である。また、myisampack
を使用して、複数のテーブルを 1
つのテーブルにマージすることもできる。
See 項4.8.4. 「myisampack
(MySQL
圧縮読み取り専用テーブルジェネレータ)」。
また、MyISAM
データファイルに関するオペレーティングシステムのファイル制限に対処する方法として、RAID
オプションを使用することもできる。 See
項6.5.3. 「CREATE TABLE
構文」。
MySQL
に組み込まれている
MERGE
ライブラリを使用して、同一のテーブルの集合を
1
つのテーブルとして処理することもできる。See
項7.2. 「MERGE
テーブル」。
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.