Microsoft SQL Server有一个很好的功能,它允许数据库在变满时自动扩展。在MySQL中,我理解数据库实际上是一个目录,其中包含一堆与各种对象相对应的文件。这是否意味着数据库大小的概念不适用,并且MySQL数据库可以与可用磁盘空间一样大而不需要任何额外的关注?如果是,这种行为在不同的存储引擎中是否相同?
这取决于您使用的引擎。可以在here找到MySQL附带的列表。
MyISAM表每个表都有一个文件。此文件可能会增长到文件系统的限制。随着表变大,您将不得不调整它,因为有限制默认大小的索引和数据大小优化。此外,这个MyISAM documentation页面说:
MyISAM表中有2 ^ 32(~4.2595 + 09)行的限制。如果使用--with-big-tables选项构建MySQL,则行限制将增加到(2 ^ 32)^ 2(1.844E + 19)行。请参见第2.16.2节“典型配置选项”。 Unix和Linux的二进制发行版使用此选项构建。
InnoDB可以在3种不同的模式下运行:使用innodb表文件,使用整个磁盘作为表文件或使用innodb_file_per_table
。
autoextend
,以便在开始填充时向最后一个表文件添加一块空间。我通常不使用此功能,因为您永远不知道什么时候您会在扩展表时获得性能提升。 This page谈论配置它。innodb_file_per_table
使InnoDB表像MyISAM表一样。每个表都有自己的表文件。上次我使用它时,如果从中删除了行,则表文件不会缩小。删除或更改表时,文件会调整大小。Archive引擎是一个gzip压缩的MyISAM表。
内存表根本不使用磁盘。实际上,当服务器重新启动时,所有数据都将丢失。
合并表就像是穷人对MyISAM表的分区。它会导致一堆相同的表被查询,就像有一个表一样。除了FRM表定义之外,除MyISAM之外不存在任何文件。
CSV表是CSV文件的包装器。通常的文件系统限制适用于此处。它们不是太快,因为它们不能有索引。
我认为不再有人使用BDB了。至少,我从来没有用过它。它使用Berkly数据库作为后端。我不熟悉它的限制。
联合表用于连接和查询其他数据库服务器上的表。同样,只有一个FRM文件。
Blackhole引擎不会在本地存储任何内容。它主要用于创建复制日志,而不是用于实际数据存储,因为没有数据存储:)
MySQL Cluster完全不同:它几乎存储在内存中(最新版本允许磁盘存储),并且与所有其他引擎非常不同。
你描述的内容大致适用于MyISAM表。对于InnoDB表,图片是不同的,更类似于其他DBMS所做的:一个(或几个)大文件,整个服务器具有复杂的内部结构。要优化它,您可以将整个磁盘(或分区)用作文件。 (至少在类似unix的系统中,一切都是文件)