MySQL
Version 3.22 had a 4 GB (4 gigabyte) limit on table size. With the
MyISAM
table type in MySQL
Version 3.23, the maximum table
size was pushed up to 8 million terabytes (2 ^ 63 bytes).
Note, however, that operating systems have their own file-size limits. Here are some examples:
Operating System | File-Size Limit |
Linux-Intel 32 bit | 2 GB, 4GB or more, depends on Linux version |
Linux-Alpha | 8 TB (?) |
Solaris 2.5.1 | 2 GB (possible 4GB with patch) |
Solaris 2.6 | 4 GB (can be changed with flag) |
Solaris 2.7 Intel | 4 GB |
Solaris 2.7 UltraSPARC | 512 GB |
On Linux 2.2 you can get tables larger than 2 GB in size by using the LFS patch for the ext2 filesystem. On Linux 2.4 patches also exist for ReiserFS to get support for big files.
In effect, then, the table size for MySQL
databases is normally
limited by the operating system.
By default, MySQL
tables have a maximum size of about 4 GB. You can
check the maximum table size for a table with the SHOW TABLE STATUS
command or with the myisamchk -dv table_name
.
See section 4.5.7 SHOW
Syntax.
If you need a table that will be larger than 4 GB in size (and your operating system supports
this), set the AVG_ROW_LENGTH
and MAX_ROWS
parameters accordingly when you create your table. See section 6.5.3 CREATE TABLE
Syntax. You can
also set these parameters later, with ALTER TABLE
. See section 6.5.4 ALTER TABLE
Syntax.
If your big table is a read-only table, you could use
myisampack
to merge and compress many tables into one.
myisampack
usually compresses a table by at least 50%, so you can
have, in effect, much bigger tables. See section 4.7.4 myisampack
, The MySQL Compressed Read-only Table Generator.
You can get around the operating system file limit for MyISAM
datafiles using the RAID
option. See section 6.5.3 CREATE TABLE
Syntax.
Another solution can be the included MERGE
library, which allows
you to handle a collection of identical tables as one.
See section 7.2 MERGE
Tables.