是否需要在分区方案之上创建对象?

时间:2014-09-03 09:34:14

标签: sql-server tsql database-partitioning

我一直在关注一些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

根据我对此的理解,它们实质上是创建一个重复的表,但将它作为一个对象放在分区方案之上。我必须这样做吗?

1 个答案:

答案 0 :(得分:1)

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

予。用分区视图去老派。

OR

II。 1.创建一个分区函数,该函数最初只有一个分区,例如:

CREATE PARTITION FUNCTION OrdersFunction (datetime2) AS RANGE LEFT FOR VALUES ();
  1. 创建一个分区方案,该方案最初映射到单个文件组,例如:
  2. CREATE PARTITION SCHEME DailyPartitionScheme AS PARTITION OrdersFunction TO ([PRIMARY]);
    
    1. 在DailyPartitionScheme上创建一个已经识别的重复订单表。
    2. 使用SWITCH将非分区Orders表的内容迁移到分区的OrdersDaily表,例如:
    3. ALTER TABLE Orders SWITCH TO OrdersDaily PARTITION 1 
      
      1. 最后,根据需要更改数据文件,分区方案,分区函数(SPLIT RANGE),以根据需要跨文件组对数据进行分区。另外,我假设您的文件组反过来拥有分布在不同磁盘上的数据文件(或最终会分配),否则首先分区的价值是值得商榷的。