请教sql2008中的分区表如何删除分区?

czb 2010-07-22 10:31:25
一个表,现阶段每天有100万左右的数据,以后还会增加。目前该表性能很差,打算把这个表按天分区,且只保存最近3个月的数据,对于超过3个月的旧数据,就用作业自动删除掉。
了解了下,对sqlserver的分区表,可以用split 来增加分区,用merge来合并分区,但merge合并分区后,原来分区中的数据并不会删除。用什么方法可以把原来分区中的数据删除掉呢,千万别是按分区来delete数据啊,这个语句可耗时了。
像oracle中有alter table xxx drop partition yyy,我要实现的就是这样的功能。
谢谢。
...全文
2295 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼上Ok!
feng3982315 2010-10-29
  • 打赏
  • 举报
回复
例如要将A表某天数据删除,首先该表应该是以天为单位的分区表,
需要如下操作:
1.建一个和A表一样的B表,
2.然后用switch语句将A表中某天数据移动到B表,
3.再将B表整个drop,
4.最后用Merge命令将A表中的空白分区合并

我前些天做过一个动态删除多个表数据的工具,这样做效率很高
kinsa 2010-09-21
  • 打赏
  • 举报
回复
sql server删除分区只能用merge
你如果同事需要删除数据的话得分两步走:
1.先建一张临时表,然后把要删除的书switch到这张临时表里;
2.与相邻的分区merge。
ailyter 2010-08-20
  • 打赏
  • 举报
回复
分区表中有数据时是不能够删除的,只能将数据先移到其它表中,再删除。
所括分区函数和分区方案在分表中未删除之前都是不可以删除的。
Johnson 2010-07-28
  • 打赏
  • 举报
回复
先switch到临时表中,然后merge。
如果不需要保存数据,可以drop临时表
paula2008 2010-07-26
  • 打赏
  • 举报
回复
这个我不会
obuntu 2010-07-26
  • 打赏
  • 举报
回复
switch
dong3431 2010-07-26
  • 打赏
  • 举报
回复
不用delete,可以使用truncate来删除,建立一个临时表结构和原表一样的,具体代码如下:
select object_name([object_id]),* from [sys].[partitions]
where [object_id]=object_id('table_name')
order by [partition_number],[index_id]

select object_name([object_id]),* from [sys].[partitions]
where [object_id]=object_id('table_name_temp')
order by [partition_number],[index_id]

alter table table_name switch partition 1 to table_name_temp partition 1

truncate table table_name_temp
claro 2010-07-26
  • 打赏
  • 举报
回复
帮顶

我也想知道。。更好的方法。
czb 2010-07-26
  • 打赏
  • 举报
回复
没有人知道吗?
czb 2010-07-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 claro 的回复:]
其实实现的方式很多,个人觉得分区的概念是希望避免出现del数据的情况;否则定期生成新表(按月的方式),再定期删除(drop)相比更好用,基本上SQL2K下是类似这样的方式实现分区效果。
[/Quote]

这个是分区视图嘛,我们目前在SQL2000下也是这么用的,但分区视图管理不方便,所以想改成SQL2008的表分区。
东那个升 2010-07-22
  • 打赏
  • 举报
回复
好像贴错了
东那个升 2010-07-22
  • 打赏
  • 举报
回复
claro 2010-07-22
  • 打赏
  • 举报
回复
关注中。
claro 2010-07-22
  • 打赏
  • 举报
回复
其实实现的方式很多,个人觉得分区的概念是希望避免出现del数据的情况;否则定期生成新表(按月的方式),再定期删除(drop)相比更好用,基本上SQL2K下是类似这样的方式实现分区效果。
Mr_Nice 2010-07-22
  • 打赏
  • 举报
回复
2K8 帮顶...
czb 2010-07-22
  • 打赏
  • 举报
回复
晕,楼上的方法就是用merge的。

那篇文章的后面都列有结果,merge前是3+2,merge后是5,merge前后数据总量并没有改变嘛。
永生天地 2010-07-22
  • 打赏
  • 举报
回复
具体没操作过,可以看看这个文章

http://blog.csdn.net/smallfools/archive/2009/12/04/4937878.aspx

6,128

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧