【发布时间】:2016-12-29 17:04:42
【问题描述】:
在 SQL Server 中,分区有循环 表 -> 分区架构 -> 文件组 (f1,f2,f3,f4,....)
例如在 Oracle 中:
SQL Server 中的文件组类似于 Oracle 中的表空间,它是表和索引数据的逻辑存储,可以包含一个或多个 OS 文件。
但是 MariaDB 有文件组吗?
【问题讨论】:
在 SQL Server 中,分区有循环 表 -> 分区架构 -> 文件组 (f1,f2,f3,f4,....)
例如在 Oracle 中:
SQL Server 中的文件组类似于 Oracle 中的表空间,它是表和索引数据的逻辑存储,可以包含一个或多个 OS 文件。
但是 MariaDB 有文件组吗?
【问题讨论】:
并非如此。你想达到什么目的?请记住,存在一些类似的事情是因为磁盘曾经比数据库小。今天,很少有问题。此外,RAID 控制器、SAN 等消除了手动决定什么文件去哪里的需要(甚至是可取的)。操作系统有连接多个卷的方法,即使是在运行中。等等。
MyISAM 能够说明数据的去向和索引文件的去向。但是 MyISAM 几乎已经死了。即使在那里,将数据放在一个驱动器上而将索引放在另一个驱动器上也是愚蠢的。在执行查询时,首先访问索引,然后访问数据。如果有任何表现,那是很少的。简单的 RAID 条带化可能会做得更好。
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 控制器很复杂,并且存在 SAN。所以原始不再重要。 (我不认为 MySQL 曾经有过。)对于供应商来说,这肯定是一个很大的开发和维护问题。
有多少 DBA 将tmpdir 放在一个单独的分区中,却发现因为分区不够大而崩溃。 RAM 磁盘也是如此。
【讨论】:
PARTITION 或磁盘分区。