Microsoft SQL Server 2008 R2中的水平分区?

问题描述

| 我想知道是否有可能使用C#.NET类在表上自动设置水平分区? 我确定可以使用服务器管理对象(SMO)或本机T-sql来实现。 水平分区将按日期进行,每个文件一个月。 更新资料 该方案效果非常好。我的.NET应用正常运行: 在商品硬件上的插入速度为90,000行/秒。 3.3亿行,52GB数据。即使数据库很大,插入的速度也不会降低。 每行很复杂,有30列。 日期列上的聚集索引(非唯一),有两个好处: 选择速度更快(特定日期为2秒,而特定日期为120秒)。 该表始终按日期顺序排序,这非常适合我们处理时间序列数据,并且希望使用游标或批量下载来检索数据。 如果您要我发布使用的代码,请在此主题上发布问题以与我联系。     

解决方法

        我无法从您对问题的措辞中得知,是否可以在代码中使用T-Sql并只是在寻找示例,还是试图避免T-Sql。如果它是前者,那么使用System.Data.SqlClient可能会像这样:
SqlConnection cn = new SqlConnection(\"a connection string to your server\");
SqlCommand cm = new SqlCommand(\"\",cn);

cn.Open();
第一步是创建分区函数。这是该分区的指南,告诉它每个分区的边界是什么。这个将日期时间划分为各个月份的示例是正确的,它来自联机丛书。
cm.CommandText = \"CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)
       AS RANGE RIGHT FOR VALUES (\'20110201\',\'20110301\',\'20110401\',\'20110501\',\'20110601\',\'20110701\',\'20110801\',\'20110901\',\'20111001\',\'20111101\',\'20111201\')\";
cm.ExecuteNonQuery();
下一步是创建一个方案。这会将您创建的功能映射到文件组,每个分区一个(即月份)。这些文件组必须已经存在,因此请事先创建它们。
cm.CommandText = \"CREATE PARTITION SCHEME myRangePS1 
                 AS PARTITION myRangePF1 TO 
                 (test1fg,test2fg,test3fg,test4fg,test5fg,test6fg,test7fg,test8fg,test9fg,test10fg,test11fg,test12fg)\";
cm.ExecuteNonQuery();
然后最后在文件组上创建一个表:
cm.CommandText = \"CREATE TABLE PartitionTable (col1 int,col2 datetime) 
                 ON myRangePS1 (col2)\";
cm.ExecuteNonQuery();

cn.Close();
最后,如果您要分区的表已经存在,那么您将必须构建函数,方案和另一个与其相似的表,然后将数据移至新表。