我有一个包含数百万条记录的表,我们正在研究实现表分区。看着它,我们有一个我们想要分区的外键“GroupID”。这可能吗?
该组将添加更多条目,因此添加新的 GroupID 可以动态创建分区吗?
我有一个包含数百万条记录的表,我们正在研究实现表分区。看着它,我们有一个我们想要分区的外键“GroupID”。这可能吗?
该组将添加更多条目,因此添加新的 GroupID 可以动态创建分区吗?
是的,您可以使用分区,是的,可以动态创建新分区。使用不需要更新的分区方案是最简单的。
SQL Enterprise 2005 及更高版本:
如果您使用的是 SQL 开发版或企业版,SQL 2005 及更高版本内置了对分区的透明支持。动态添加更多分区意味着您必须创建新的分区功能、新的分区方案和可能的新文件组。
您可以使用 SPLIT 更改分区函数:
ALTER PARTITION FUNCTION MyPartitionFunction ()
SPLIT RANGE (2);
SQL 2000 或 SQL 2005 及以上非企业版:
否则,您仍然可以使用分区,但您需要使用旧的 MS SQL 2000 方式。以旧方式,您必须物理创建许多表,然后创建一个视图,即每个表的 UNION ALL。因此,您需要事先了解架构。
关于旧分区方式的好消息是动态创建新分区更加容易。您只需要创建一个具有新约束的新表并更新您的视图。
但是有一些限制,您的分区列必须是主键的一部分。并且要直接插入到您的视图中,您不需要有一个标识列(由 MS SQL 自动递增的)
Group ID 可能不是最好的分区项目,分区适合滚动窗口效果,并且更多地用于删除过时的数据和滚动新数据。
通过对 ID 进行分组,您只允许自己添加/删除组,例如,没有时间元素/数据寿命。每个分区表也有 1000 个分区的硬性限制,将您限制为 1000 个组。由于您打算添加组 ID,并且它未指示为静态数字,因此您可能会达到此硬限制。
扩展 1000 的限制的唯一选择是跨多个分区表放置分区视图。
我要问的问题是是什么导致添加新数据/删除旧数据以及基于什么制作。仅仅因为该表有数百万行并不能使其成为分区的直接候选者,这就是我要问这个问题的原因。
在动态添加它们方面 - 该功能不存在,您必须编写存储过程和逻辑来处理新文件组的分配/下一次使用的设置和分区函数的拆分。它可以完成,但 SQL 不会为您完成。