MySQL数据库大小

3

微软SQL Server有一个好的功能,使得当数据库变满时可以自动扩展。在MySQL中,我了解到数据库实际上是一个目录,包含着对应各个对象的一堆文件。这是否意味着数据库大小的概念不适用于MySQL,并且MySQL数据库可以根据可用磁盘空间而无需额外担心地任意扩大?如果是,这种行为在不同的存储引擎中是否相同?

2个回答

4
取决于你使用的引擎。MySQL自带的引擎列表可以在这里找到。
MyISAM表格是每个表格一个文件。这个文件可以增长到文件系统的极限。随着表格变大,您需要进行调整,因为有索引和数据大小优化会限制默认大小。此外,MyISAM文档页面上说:

MyISAM表格中有2^32(~4.295E+09)行的限制。如果您使用--with-big-tables选项构建MySQL,则行限制将增加到(2^32)^2 (1.844E+19)行。请参阅2.16.2节“典型配置选项”。Unix和Linux的二进制发行版都是使用此选项构建的。

InnoDB可以在3种不同的模式下操作:使用InnoDB表格文件、使用整个磁盘作为表格文件或使用innodb_file_per_table
  • 表格文件是根据您的MySQL实例预先创建的。您通常需要创建大量空间并监视它。当它开始填满时,您需要配置另一个文件并重新启动服务器。您还可以将其设置为autoextend,这样当最后一个表格文件开始填满时,它将添加一块空间。我通常不使用此功能,因为您永远不知道何时会对扩展表格的性能产生影响。此页面介绍了如何进行配置。
  • 我从未使用过整个磁盘作为表格文件,但是它可以完成。您需要指向未格式化、未挂载的设备,而不是指向文件。
  • innodb_file_per_table使InnoDB表格的行为类似于MyISAM表格。每个表格都有自己的表格文件。上次我使用它时,如果您从中删除行,则表格文件不会缩小。当表格被删除或更改时,文件会重新调整大小。
Archive引擎是一个经过压缩的MyISAM表格。
内存表格根本不使用磁盘。实际上,当服务器重新启动时,所有数据都会丢失。
合并表格就像是MyISAM表格的贫穷人的分区。它导致一堆相同的表格被查询,好像它们是一个表格。除了FRM表格定义之外,没有任何文件存在,只有MyISAM文件。
CSV表格是CSV文件的包装器。这里适用于通常的文件系统限制。它们不太快,因为它们不能有索引。

我认为现在没有人再使用BDB了。至少我从未使用过它。它使用Berkly数据库作为后端。我不熟悉它的限制。

联合表用于连接和查询其他数据库服务器上的表。同样,只有一个FRM文件。

Blackhole引擎不会在本地存储任何内容。它主要用于创建复制日志,而不是实际数据存储,因为没有数据存储:)

MySQL Cluster则完全不同:它将几乎所有内容存储在内存中(最近的版本可允许磁盘存储),并且与所有其他引擎非常不同。


非常感谢,这是一个非常详细的答案!! - azerole

1

你所描述的大致适用于MyISAM表。对于InnoDB表,情况则不同,并且更类似于其他DBMS所做的:整个服务器使用一个(或几个)具有复杂内部结构的大文件。为了优化它,可以将整个磁盘(或分区)用作文件。(至少在类Unix系统中,一切都是文件)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接