SQL 千万级大数据,按年份分表并删除原表数据

来源:互联网 发布:网络销售是不是传销 编辑:程序博客网 时间:2024/05/21 09:56

原有数据量主表38w,子表1200w


最终分表成为主表为当年数据,将2015,2016分表存储



--下面分表过程


--先查订单主表的是否有外键约束,

select
a.name as 约束名,
object_name(b.parent_object_id) as 外键表,
d.name as 外键列,
object_name(b.referenced_object_id) as 主健表,
c.name as 主键列
from sys.foreign_keys A
inner join sys.foreign_key_columns B on A.object_id=b.constraint_object_id
inner join sys.columns C on B.parent_object_id=C.object_id and B.parent_column_id=C.column_id 
inner join sys.columns D on B.referenced_object_id=d.object_id and B.referenced_column_id=D.column_id 
where object_name(B.referenced_object_id)='Hishop_Orders';
--删除约束
ALTER TABLE dbo.Hishop_OrderGifts  DROP CONSTRAINT FK_Hishop_OrderGifts_Orders
ALTER TABLE dbo.Hishop_OrderItems  DROP CONSTRAINT FK_Hishop_OrderItems_Orders
ALTER TABLE dbo.Hishop_OrderRefund  DROP CONSTRAINT FK_Hishop_OrderRefund_Orders
ALTER TABLE dbo.Hishop_OrderReplace  DROP CONSTRAINT FK_Hishop_OrderReplace_Orders

ALTER TABLE dbo.Hishop_OrderSendNote  DROP CONSTRAINT FK_Hishop_OrderSendNote_Orders


按年份整表架构copy 并数据copy (经过测试速度快)

select * into Hishop_Orders_2016 from Hishop_Orders  where hisyear='2016

--建立索引
CREATE NONCLUSTERED INDEX [Hishop_Orders_Index2] ON [dbo].[Hishop_Orders_2016]
([PaymentTypeId] ASC)
CREATE NONCLUSTERED INDEX [Hishop_Orders_Index3] ON [dbo].[Hishop_Orders_2016]
([Username] ASC)
CREATE NONCLUSTERED INDEX [Hishop_Orders_Index4] ON [dbo].[Hishop_Orders_2016]
([UserId] ASC)
 --建立主键
alter table Hishop_Orders_2016 add constraint [Hishop_Orders_Index_2016] primary key(orderID)

  

执行历史删除(因主订单表数据转存)需要将主表数据删除,大数据如何删除

因建立了索引问题,先删除索引在删数据 在建立索引 这样删除 800W数据 16分钟 


先删除索引,主键不删

DROP INDEX [Hishop_Orders_Index5] ON [dbo].[Hishop_OrderItems]
DROP INDEX [IDX_ORDERID_OrderItems] ON [dbo].[Hishop_OrderItems]
DROP INDEX [IDX_ORDERID_PRODUCTID] ON [dbo].[Hishop_OrderItems]
DROP INDEX [IDX_SKU] ON [dbo].[Hishop_OrderItems]
DROP INDEX [IDX_SKUID_PRODUCTID] ON [dbo].[Hishop_OrderItems]
DROP INDEX [idxHishop_OrderItems_GuidId] ON [dbo].[Hishop_OrderItems] WITH ( ONLINE = OFF )
DROP INDEX [idxHishop_OrderItems_OrderIdExt] ON [dbo].[Hishop_OrderItems]
DROP INDEX [PK_Hishop_OrderItemsMain] ON [dbo].[Hishop_OrderItems]

在按年份删除只留当年数据
delete [dbo].[Hishop_OrderItems] where HisYear=2016 
delete [dbo].[Hishop_OrderItems] where HisYear=2015 

在把索引建立回来
CREATE NONCLUSTERED INDEX [Hishop_Orders_Index5] ON [dbo].[Hishop_OrderItems]([ProductId] ASC)
CREATE NONCLUSTERED INDEX [IDX_ORDERID_OrderItems] ON [dbo].[Hishop_OrderItems]([OrderId] ASC)
CREATE NONCLUSTERED INDEX [IDX_ORDERID_PRODUCTID] ON [dbo].[Hishop_OrderItems]
([OrderId] ASC,[ProductId] ASC,[SkuId] ASC,[SKU] ASC)
CREATE NONCLUSTERED INDEX [IDX_SKU] ON [dbo].[Hishop_OrderItems]([SKU] ASC)
CREATE NONCLUSTERED INDEX [IDX_SKUID_PRODUCTID] ON [dbo].[Hishop_OrderItems]([SkuId] ASC,[ProductId] ASC)
CREATE CLUSTERED INDEX [idxHishop_OrderItems_GuidId] ON [dbo].[Hishop_OrderItems]([GuidId] ASC)
CREATE NONCLUSTERED INDEX [idxHishop_OrderItems_OrderIdExt] ON [dbo].[Hishop_OrderItems]([OrderIdExt] ASC)
CREATE NONCLUSTERED INDEX [PK_Hishop_OrderItemsMain] ON [dbo].[Hishop_OrderItems]([MainOrderId] ASC)




分表完成




原创粉丝点击