MySQL数据库大小

问题描述 投票:3回答:2

Microsoft SQL Server有一个很好的功能,它允许数据库在变满时自动扩展。在MySQL中,我理解数据库实际上是一个目录,其中包含一堆与各种对象相对应的文件。这是否意味着数据库大小的概念不适用,并且MySQL数据库可以与可用磁盘空间一样大而不需要任何额外的关注?如果是,这种行为在不同的存储引擎中是否相同?

mysql database
2个回答
4
投票

这取决于您使用的引擎。可以在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

  • 根据您的MySQL实例预先创建表文件。您通常会创建大量空间并对其进行监控。当它开始填满时,您需要配置另一个文件并重新启动服务器。您还可以将其设置为autoextend,以便在开始填充时向最后一个表文件添加一块空间。我通常不使用此功能,因为您永远不知道什么时候您会在扩展表时获得性能提升。 This page谈论配置它。
  • 我从未将整个磁盘用作表文件,但可以完成。我相信您将InnoDB表文件指向未格式化的未安装设备,而不是指向文件。
  • innodb_file_per_table使InnoDB表像MyISAM表一样。每个表都有自己的表文件。上次我使用它时,如果从中删除了行,则表文件不会缩小。删除或更改表时,文件会调整大小。

Archive引擎是一个gzip压缩的MyISAM表。

内存表根本不使用磁盘。实际上,当服务器重新启动时,所有数据都将丢失。

合并表就像是穷人对MyISAM表的分区。它会导致一堆相同的表被查询,就像有一个表一样。除了FRM表定义之外,除MyISAM之外不存在任何文件。

CSV表是CSV文件的包装器。通常的文件系统限制适用于此处。它们不是太快,因为它们不能有索引。

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

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.