2014-09-03 30 views
0

我一直在关注一些SQL Server表分区教程,但是我似乎无法找到关于所有方面如何组合在一起的概述或解释。是否需要在分区方案上创建对象?

例如,我有一个现有的表,我想分区名为'Orders'。

所以我去创建我的分区功能Orders table

然后我在分区函数之上创建我的分区方案。

这是否意味着如果我插入到Table1中,它现在将被自动分区? 或者是我不明白的部分,在本教程有以下几点:

--****************** 
--6. CREATE OBJECTS ON THE PARTITION SCHEME   
--******************  
--Create a partitioned heap... yep, you can do that! 

CREATE TABLE OrdersDaily (
    OrderDate DATETIME2(0) NOT NULL, 
    OrderId int IDENTITY NOT NULL, 
    OrderName nvarchar(256) NOT NULL 
) on DailyPartitionSceheme(OrderDate) 
GO 

从我明白这一点,是他们基本上是创建一个重复表,但把它作为顶级对象的分区方案。我必须这样做吗?

+0

考虑阅读文档?教程很少解释基础知识,文档排序正是发生这种情况的原因。另外 - 什么用途是不使用的分区方案?没有使用它的对象 - 这只是无用的元数据。常识说,为了获得分区的好处,你必须 - 分区表。 – TomTom 2014-09-03 09:42:25

回答

1

对已经存在的非分区表进行分区非常棘手,不一定建议。我不确定现有的表有多大,或者有多少表可能已经有外键引用它等等,所以YMMV。想到两种可能的方法:

I.改为使用分区视图的旧学校。

二, 1.创建分区函数在初始阶段,仅具有单一分区,例如:

 
CREATE PARTITION FUNCTION OrdersFunction (datetime2) AS RANGE LEFT FOR VALUES(); 
  1. 创建分区方案,该方案中,首先,映射到单个文件组,例如:
 
CREATE PARTITION SCHEME DailyPartitionScheme AS PARTITION OrdersFunction TO ([PRIMARY]); 
  1. 在DailyPartitionScheme上创建一个您已经看到的重复Orders表。
  2. 使用切换到非分区Orders表的内容迁移到分区OrdersDaily表,例如:
 
ALTER TABLE Orders SWITCH TO OrdersDaily PARTITION 1 
  1. 最后,修改数据文件,分区方案,分区功能(SPLIT RANGE )根据需要在整个文件组中按需分区数据。此外,我假设您的文件组反过来具有分布在不同磁盘(或将最终)的数据文件,否则首先分区的值是有争议的。
+0

所以,如果我正确地理解你。你不能只用数据分区表,你需要创建一个新表并在其上创建分区,然后将所有数据输入到该表中。这是为了让sql可以决定哪些行属于哪个分区? – Zapnologica 2014-09-04 09:58:10

+1

是的,这是正确的。将旧表上的任何依赖关系重构为新表之后,可以删除旧表。 – Jason 2014-09-04 16:18:39

相关问题