我有一个包含 40 亿行的表,我计划将这些行拆分为一年中每个季度的单独表。然后我想创建一个跨所有表的分区视图。
目前我有一个数据文件组(大部分数据所在)和一个非聚集索引文件组(我一直在慢慢地将索引迁移到这个文件组)
数据文件组和非聚集索引文件组位于不同的磁盘上。
各个表将添加主键和非聚集索引。我应该把这些放在哪里?(就文件组而言)我应该为每个表、每种类型的索引等创建文件组吗?
注意:我不能使用数据分区,因为我们没有企业版。
我有一个包含 40 亿行的表,我计划将这些行拆分为一年中每个季度的单独表。然后我想创建一个跨所有表的分区视图。
目前我有一个数据文件组(大部分数据所在)和一个非聚集索引文件组(我一直在慢慢地将索引迁移到这个文件组)
数据文件组和非聚集索引文件组位于不同的磁盘上。
各个表将添加主键和非聚集索引。我应该把这些放在哪里?(就文件组而言)我应该为每个表、每种类型的索引等创建文件组吗?
注意:我不能使用数据分区,因为我们没有企业版。
如果您要使用传统的分区视图,每个表包含不同的年度季度,那么您在这里有几个级别的分离:
所以换句话说,假设您有 10 个分区视图访问的表,并且每个表上都有一个聚簇索引和一个非聚簇索引。在这种情况下,您正在查看需要相应放置的 20 种不同的数据结构。
至于将它们中的每一个放在哪里,将在很大程度上取决于您的工作量。例如,如果只有最近的两个季度表获得最多的报告查询和数据修改,您需要确保它们是分开的。但在同样的方面,您可以从每个在不同磁盘上具有索引的表中受益。
我在这里说磁盘是因为文件组是数据库数据文件的逻辑分组。即使您将每个表和每个索引拆分到它们自己的文件组(为了说明一点而被夸大),但所有包含的数据文件都在同一组物理磁盘上,您也不会真正看到任何潜在的 I/O 性能提升。 那时它真的只是行政性的。 当从设计中榨取性能时,您不能总是划分物理层和逻辑层。
因此,您需要直观地布置物理磁盘分隔、您将接收的常见工作负载类型,并以这种方式设计数据放置。
我在这里看到了很多要点:
从第二个开始,分离非聚集索引作为通用方法可能不是一个好主意。
对齐存储(表中的行,以及依赖于存储在同一文件组中的那些行的索引)确保,如果你想备份或恢复分区,数据和相应的索引保持在一起。
除此之外,如果您想要一个包含旧数据的表和一个包含最新数据的表,您将需要使用 SWITCH,它具有以下要求: