多少个数据库,是没有限制的,但是数据表的大小是有限制的.(前提是,这以前都要满足硬件的要求,文件的大小当然也不能超过操作系统支持的文件最大尺寸.
1:对于ISAM数据表,单个.ISD和.ISM文件的最大尺寸都是4GB
2:对于MyISAM数据表,单个.MYD和.MYI默认也是4GB,但是可以在创建数据表的时候,利用AVG_ROW_LENGTH和MAX_ROWS选项把这个最大值扩大到800万TB.
3:MERGE数据表的尺寸是它的组成MyISAM数据表的最大尺寸之和
4:BDB,随数据表页面尺寸变化,最小的页面尺寸(512byte),.db文件可以到2TB
5:InnoDB数据表,最大尺寸是40亿个页面,默认的页面尺寸是16KB
强调,怎么也不能超过操作系统对一个文件的最到限制
max_rows主要对myisam生效,avg_row_length对blob,text字段起作用,以优化存储空间。
max_rows 是配合myisam_data_pointer_size使用的。
官方文档:
To change the default size limit for MyISAM tables, set the myisam_data_pointer_size, which sets the number of bytes
used for internal row pointers. The value is used to set the pointer size for new tables if you do not specify the MAX_ROWS op-
tion. The value of myisam_data_pointer_size can be from 2 to 7. A value of 4 permits tables up to 4GB; a value of 6
permits tables up to 256TB
如果你把max_rows 设为5, 但 myisam_data_pointer_size范围是 2~7, 2个字节就足够了( 2^16=64k), 所以其实就是让myisam是用2个字节的指针,并不是说最多5行。 如果你把max_rows 设为 100k,此时 100K>64K, 就要用3个字节表示,所以myisam_data_pointer_size会设为3, 此时最多存放 2^24行。
mysql> create table t1 (a int) max_rows=2 engine=myisam;
Query OK, 0 rows affected (0.05 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 select * from t1;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into t1 select * from t1;
Query OK, 8 rows affected (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0
............
继续执行insert into t1 select * from t1;
............
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 65535 |
+----------+
1 row in set (0.00 sec)
mysql> insert into t1 select * from t1;
ERROR 1114 (HY000): The table 't1' is full
mysql>
1.4.4. MySQL表最大能达到多少
MySQL 3.22限制的表大小为4GB。由于在MySQL 3.23中使用了MyISAM存储引擎,最大表尺寸增加到了65536TB(2567 – 1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。
在下面的表格中,列出了一些关于操作系统文件大小限制的示例。这仅是初步指南,并不是最终的。要想了解最新信息,请参阅关于操作系统的文档。
操作系统
文件大小限制
Linux 2.2-Intel 32-bit
2GB (LFS: 4GB)
Linux 2.4+
(using ext3 filesystem) 4TB
Solaris 9/10
16TB
NetWare w/NSS filesystem
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检查表的最大尺寸。请参见13.5.4节,“SHOW语法”。
如果需要使用大于4GB的MyISAM表(而且你的操作系统支持大文件),可使用允许AVG_ROW_LENGTH和MAX_ROWS选项的CREATE TABLE语句。请参见13.1.5节,“CREATE TABLE语法”。创建了表后,也可以使用ALTER TABLE更改这些选项,以增加表的最大允许容量。请参见13.1.2节,“ALTER TABLE语法”。
处理MyISAM表文件大小的其他方式:
· 如果你的大表是只读的,可使用myisampack压缩它。myisampack通常能将表压缩至少50%,因而,从结果上看,可获得更大的表。此外,myisampack还能将多个表合并为1个表。请参见8.2节,“myisampack:生成压缩、只读MyISAM表”。
· MySQL包含一个允许处理MyISAM表集合的MERGE库,这类MyISAM表具有与单个MERGE表相同的结构。请参见15.3节,“MERGE存储引擎”。
1.4.2. MySQL的的主要特性
......
可伸缩性和限制
处理大型数据库: 我们使用了MySQL服务器和含5千万条记录的数据库。我们还听说,有些用户将MySQL用于含60000个表和约50亿行的数据库。
每个表可支持高达64条索引(在MySQL 4.1.2之前为32条)。每条索引可由1~16个列或列元素组成。最大索引宽度为1000字节(在MySQL 4.1.2之前为500)。索引可使用具备CHAR、VARCHAR、BLOB或TEXT列类型的列前缀。