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