mysql - MariaDB 中的文件组

标签 mysql innodb mariadb

在 SQL Server 中,分区有类似的循环 表 -> 分区架构 -> 文件组(f1,f2,f3,f4,....)

例如在 Oracle 中:

SQL Server中的文件组类似于Oracle中的表空间,它是表和索引数据的逻辑存储,可以包含一个或多个操作系统文件。

但是 MariaDB 有文件组吗?

最佳答案

不是这样的。你想达到什么目的?请记住,某些类似的事情之所以存在,是因为磁盘过去比数据库小。今天,很少出现问题。此外,RAID Controller 、SAN 等消除了手动决定文件存放位置的需要(甚至不需要)。操作系统有方法连接多个卷,即使是在运行中也是如此。等等

MyISAM 能够说出数据的去向以及索引文件的去向。但 MyISAM 几乎已经死了。即使在那里,将数据放在一个驱动器上而将索引放在另一个驱动器上也是愚蠢的。在执行查询时,首先访问索引,然后访问数据。即使获得了任何性能,那也是微乎其微的。简单的 RAID strip 化可能效果更好。

InnoDB 有一种方法可以拼出 ibdata1、ibdata2 等。这可以追溯到操作系统无法创建大于 2GB 或 4GB 的文件的时代。如今它基本上从未被使用过。

InnoDB 表可以全部位于 ibdata1 中,也可以分散在各个 .ibd 文件中。但我真的不认为这就是你所说的。使用这种“每个表一个文件”的方式,小表的存储效率很低。 MySQL 8.0 将对此稍作改进,允许您将多个表放入给定的“表空间”中,类似于 .ibd 文件。

InnoDB 表空间包含给定表或表集的所有数据索引。分区表,当 file_per_table 时,每个分区都位于不同的 .ibd 文件中。这可能会随着 8.0 的改变而改变。

所有这些都不值得一提。我猜想只有 1% 的系统需要考虑这个问题。只需让 MySQL/MariaDB 做它想做的事即可;已经足够好了。

相关的事情......在 80 年代和 90 年代,一些供应商拥有“原始设备”访问权限,因为他们认为他们可以比通过操作系统做得更好。同样,操作系统已经改进,RAID Controller 更加复杂,并且 SAN 已经存在。所以生的已经不再重要了。 (我不认为 MySQL 曾经有过它。)这对于供应商来说肯定是一个很大的开发和维护问题。

有多少 DBA 将 tmpdir 放在单独的分区中,却发现由于它不够大而崩溃。 RAM 磁盘也是如此。

关于mysql - MariaDB 中的文件组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384128/

相关文章:

mysql - 字段类型可以具有这些值 1,2,3..10。如何统计type的最高出现频率值的记录

MySQL第二个基于外键的自增字段

mysql - 通过锁定或事务来防止重复数据?

mysql - 如何为长文本创建索引(mysql、innodb)?

mysql - 玛丽亚数据库/MySQL : is the "UTC" timezone the same as "+00:00"?

mysql - 使用 SQL 将 json 数据列表字段转换为列

php - 更新一个字段,使订单值连续

php - PDO 和 openssl_public_decrypt 失败

database - 多主到单从复制

php - 从 android 发布 JSON 数据时出错