当前位置:Gxlcms > 数据库问题 > 数据库分区表(转)

数据库分区表(转)

时间:2021-07-01 10:21:17 帮助过:27人阅读

  我们的数据库已经投入使用一段时间了,但是当时没有创建创建分区表,现在我们需要做的是将普通表转换成分区表,但是并不能影响我们数据库里面的数据,那么我们应该如何做呢?只需在该表上创建一个聚集索引,并在该聚集索引中使用分区方案即可。

     说的很简单,但是在实现实现可就没有那么容易了,因为你的数据库中存在主键,外键等约束关系,那么我们在将普通表转换成分区表时,首先就需要解决这些问题。

     我们知道分区表时某个字段为分区条件的,除了这个字段之外的其他字段是不能创建聚集索引的,所以我们将普通表转换成分区表时,必须要删除聚集索引,然后再重新创建一个新的聚集索引,在该聚集索引中使用分区方案。

     但是我们需要修改的t_sellLog表中的orderId既是主键又是聚集索引,而且还是其它表的外键。因此,我们只能先删除外键关联,再删除主键,然后重新创建orderId为主键,但是设置为非聚集索引,然后将我们的sellTime字段设置为聚集索引,最后添加上我们的外键约束,至此普通表转换成分区表的工作结束,代码如下:

     --查看外键约束

use CX_Partiton_Scheme

exec sp_helpconstraint t_SellLog

--删除外键约束

alter table t_sellLog drop constraint FK_t_SellLog_t_User

--删掉主键

ALTER TABLE t_SellLog DROP constraint PK_t_SellLog 

--创建主键,但不设为聚集索引

ALTER TABLE t_SellLog ADD CONSTRAINT PK_t_SellLog PRIMARY KEY NONCLUSTERED ( 

    orderId ASC

)

 ON [PRIMARY]

 --创建一个新的聚集索引,在该聚集索引中使用分区方案

CREATE CLUSTERED INDEX CT_SellLog ON t_SellLog(sellTime) 

ON partsch_CX([sellTime])

 --添加删除掉的外键约束(具体自己根据实际情况自己实现)

 

     转换成功之后,我们可以通过下面代码查看每个分区表中的记录数:

   --统计所有分区表中的记录总数  

select $PARTITION.partfun_CX([sellTime]) as 分区编号,count(orderId) as 记录数from t_SellLog group by$PARTITION.partfun_CX([sellTime])

     我们还可以通过下面的代码,查看数据库库中的数据在哪个分区中:

   --查看数据库表中的数据在哪个分区中

select $PARTITION.partfun_CX(‘2010-10-1‘)  --查询年月日的数据在哪个分区中

select $PARTITION.partfun_CX(‘2011-01-1‘)  --查询年月日的数据在哪个分区中如果你想比较一下我们使用分区方案之后和之前程序有多少效率提高,我们可以通过下面的语句来看看一下脚本的执行时间就OK了,我经过测试的数据是快了0.017秒,一方面由于我们的测试数据量比较小,另一方面我的机器配置还是蛮不错的。

     --查看SQL脚本的执行时间

   select getDate()

   select * from t_sellLog

   select getDate()

数据库分区表(转)

标签:出错   文件   dex   数据库   分段   http   点击   数据库表   标签   

人气教程排行