Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否需要在分区方案上创建对象?_Sql Server_Tsql_Database Partitioning - Fatal编程技术网

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

Sql server 是否需要在分区方案上创建对象?,sql-server,tsql,database-partitioning,Sql Server,Tsql,Database Partitioning,我一直在学习一些SQLServer表分区教程,但似乎找不到所有方面如何结合在一起的概述或解释 我有一个现有的表,我想对其进行分区,例如名为“Orders” 所以我在订单表上创建了我的分区函数 然后在分区函数的顶部创建分区方案 这是否意味着,如果我在表1中插入,它现在将自动分区? 或者哪一部分我不理解,在教程中有以下内容: --****************** --6. CREATE OBJECTS ON THE PARTITION SCHEME --***********

我一直在学习一些SQLServer表分区教程,但似乎找不到所有方面如何结合在一起的概述或解释

我有一个现有的表,我想对其进行分区,例如名为“
Orders

所以我在
订单表
上创建了我的分区函数

然后在分区函数的顶部创建分区方案

这是否意味着,如果我在表1中插入,它现在将自动分区? 或者哪一部分我不理解,在教程中有以下内容:

--******************
--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

据我所知,他们实际上是在创建一个重复的表,但将其作为一个对象放在分区方案的顶部。我必须这样做吗?

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

I.改为以分区视图的方式进行旧式学习

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

CREATE PARTITION FUNCTION OrdersFunction (datetime2) AS RANGE LEFT FOR VALUES (); 创建分区函数OrdersFunction(datetime2)作为值()的剩余范围;
  • 创建最初映射到单个文件组的分区方案,例如:
  • 创建分区方案DailyPartitionScheme作为分区顺序函数到([PRIMARY]);
  • 在DailyPartitionScheme上创建一个已识别的重复订单表
  • 使用SWITCH将非分区Orders表的内容迁移到分区OrdersDay表,例如:
  • ALTER TABLE Orders切换到ORDERSDAY分区1
  • 最后,根据需要更改数据文件、分区方案、分区函数(分割范围),以便按需跨文件组对数据进行分区。另外,我假设您的文件组中的数据文件分布在不同的磁盘上(或最终将分布在不同的磁盘上),否则分区的价值首先是有争议的

  • 考虑阅读文档了吗?教程很少解释基础知识,而文档正是这种情况发生的地方。还有-没有使用的分区方案有什么用?如果没有对象使用它,它只是无用的元数据。常识上说,为了获得表分区的好处,你必须对表进行分区。您不能只在表中对数据进行分区,您需要创建一个新表并在其上创建分区,然后将所有数据输入该表。这样sql就可以决定哪些行属于哪个分区了吗?是的,这是正确的。将旧表上的任何依赖项重构为新表后,可以删除旧表。 CREATE PARTITION SCHEME DailyPartitionScheme AS PARTITION OrdersFunction TO ([PRIMARY]); ALTER TABLE Orders SWITCH TO OrdersDaily PARTITION 1