微软SQL Server有一个好的功能,使得当数据库变满时可以自动扩展。在MySQL中,我了解到数据库实际上是一个目录,包含着对应各个对象的一堆文件。这是否意味着数据库大小的概念不适用于MySQL,并且MySQL数据库可以根据可用磁盘空间而无需额外担心地任意扩大?如果是,这种行为在不同的存储引擎中是否相同?
InnoDB可以在3种不同的模式下操作:使用InnoDB表格文件、使用整个磁盘作为表格文件或使用MyISAM表格中有2^32(~4.295E+09)行的限制。如果您使用--with-big-tables选项构建MySQL,则行限制将增加到(2^32)^2 (1.844E+19)行。请参阅2.16.2节“典型配置选项”。Unix和Linux的二进制发行版都是使用此选项构建的。
innodb_file_per_table
。
autoextend
,这样当最后一个表格文件开始填满时,它将添加一块空间。我通常不使用此功能,因为您永远不知道何时会对扩展表格的性能产生影响。此页面介绍了如何进行配置。innodb_file_per_table
使InnoDB表格的行为类似于MyISAM表格。每个表格都有自己的表格文件。上次我使用它时,如果您从中删除行,则表格文件不会缩小。当表格被删除或更改时,文件会重新调整大小。我认为现在没有人再使用BDB了。至少我从未使用过它。它使用Berkly数据库作为后端。我不熟悉它的限制。
联合表用于连接和查询其他数据库服务器上的表。同样,只有一个FRM文件。
Blackhole引擎不会在本地存储任何内容。它主要用于创建复制日志,而不是实际数据存储,因为没有数据存储:)
MySQL Cluster则完全不同:它将几乎所有内容存储在内存中(最近的版本可允许磁盘存储),并且与所有其他引擎非常不同。
你所描述的大致适用于MyISAM表。对于InnoDB表,情况则不同,并且更类似于其他DBMS所做的:整个服务器使用一个(或几个)具有复杂内部结构的大文件。为了优化它,可以将整个磁盘(或分区)用作文件。(至少在类Unix系统中,一切都是文件)