在 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/