MySQL表最大能达到多少?

 

MySQL 3.22限制的表大小为4GB。因为在MySQL 3.23中使用了MyISAM存储引擎,最大表尺寸增长到了65536TB(2567– 1字节)。因为容许的表尺寸更大,MySQL数据库的最大有效表尺寸一般是由操做系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。

InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件建立。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。html


在下面的表格中,列出了一些关于操做系统文件大小限制的示例。这仅是初步指南,并非最终的。要想了解最新信息,请参阅关于操做系统的文档。mysql


 


操做系统linux


文件大小限制sql


Linux 2.2-Intel 32-bit数据库


2GB (LFS: 4GB)spa


Linux 2.4+操作系统


(使用 ext3 文件系统) 4TB.net


Solaris 9/10orm


16TBhtm


NetWare w/NSS 文件系统


8TB


win32 w/ FAT/FAT32


2GB/4GB


win32 w/ NTFS


2TB(可能更大)


MacOS X w/ HFS+


2TB


 


 


 


 


 


 


在Linux 2.2平台下,经过使用对ext2文件系统的大文件支持(LFS)补丁,能够得到超过2GB的MyISAM表。在Linux 2.4平台下,存在针对ReiserFS的补丁,可支持大文件(高达2TB)。目前发布的大多数Linux版本均基于2.4内核,包含全部所需的LFS补丁。使用JFS和XFS,petabyte(千兆兆)和更大的文件也能在Linux上实现。然而,最大可用的文件容量仍取决于多项因素,其中之一就是用于存储MySQL表的文件系统。


关于Linux中LFS的详细介绍,请参见Andreas Jaeger的“Linux中的大文件支持”页面:http://www.suse.de/~aj/linux_lfs.html


Windows用户请注意: FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS。


在默认状况下,MySQL建立的MyISAM表容许的最大尺寸为4GB。你能够使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的最大尺寸。


 

1
mysql > show table status like 't_user';

若是须要使用大于4GB的MyISAM表(并且你的操做系统支持大文件),可以使用容许AVG_ROW_LENGTH和MAX_ROWS选项的CREATE TABLE语句。


建立了表后,也能够使用ALTER TABLE更改这些选项,以增长表的最大容许容量。


如下语句将表的最大容量设成了1000G(1TB)


 

1
mysql > alter table t_user max_rows = 200000000000 avg_row_length = 50;

处理MyISAM表文件大小的其余方式:


若是你的大表是只读的,可以使用myisampack压缩它。myisampack一般能将表压缩至少50%,于是,从结果上看,可得到更大的表。此外,myisampack还能将多个表合并为1个表。


MySQL包含一个容许处理MyISAM表集合的MERGE库,这类MyISAM表具备与单个MERGE表相同的结构。


下面是一个例子:


这是一个存储天气的表:


mysql> describe weather; 
 +-----------+--------------+------+-----+------------+-------+ 
 | Field     | Type         | Null | Key | Default    | Extra | 
 +-----------+--------------+------+-----+------------+-------+ 
 | city      | varchar(100) |      | MUL |            |       | 
 | high_temp | tinyint(4)   |      |     | 0          |       | 
 | low_temp  | tinyint(4)   |      |     | 0          |       | 
 | the_date  | date         |      |     | 0000-00-00 |       | 
 +-----------+--------------+------+-----+------------+-------+ 
 4 rows in set (0.01 sec)

看看它的容量大小限制,咱们使用 SHOW TABLE STATUS


mysql> show table status like 'weather' \G 
 *************************** 1. row *************************** 
 Name: weather 
 Type: MyISAM 
 Row_format: Dynamic 
 Rows: 0 
 Avg_row_length: 0 
 Data_length: 0 
 Max_data_length: 4294967295 
 Index_length: 1024 
 Data_free: 0 
 Auto_increment: NULL 
 Create_time: 2003-03-03 00:43:43 
 Update_time: 2003-03-03 00:43:43 
 Check_time: 2003-06-14 15:11:21 
 Create_options: 
 Comment: 
 1 row in set (0.00 sec)

注意 Max_data_length 为4GB. 咱们把它改大:


mysql> alter table weather max_rows = 200000000000 avg_row_length = 50; 
 Query OK, 0 rows affected (0.03 sec) 
 Records: 0  Duplicates: 0  Warnings: 0 
 mysql> show table status like 'weather' \G 
 *************************** 1. row *************************** 
 Name: weather 
 Type: MyISAM 
 Row_format: Dynamic 
 Rows: 0 
 Avg_row_length: 0 
 Data_length: 0 
 Max_data_length: 1099511627775 
 Index_length: 1024 
 Data_free: 0 
 Auto_increment: NULL 
 Create_time: 2003-06-17 13:12:49 
 Update_time: 2003-06-17 13:12:49 
 Check_time: NULL 
 Create_options: max_rows=4294967295 avg_row_length=50 
 Comment: 
 1 row in set (0.00 sec)

如今的表能够存储更多的内容了.


是否行数太多?


修改容量后,你会发现(上面例子)Create_options 中多了最大行数的限制4294967295,是的,它仍然有必定的限制,但如今的限制是行数,并非表的容量大小了。也就是说你的最大行数不能超过4294967295.


为何?


由于系统是32位,若是你移到64位的系统里,这个行数限制就会增长.

 

摘自: http://blog.csdn.net/gayayang/article/details/7200958

相关文章
相关标签/搜索