【发布时间】:2015-01-14 07:45:04
【问题描述】:
我有一个表Order,我想删除clientId 的数据。此表每个客户端有超过 2071458 条记录。而且这个表有16个表的外键引用。哇,当我尝试通过 clientid 删除记录时,删除记录需要 2-4 小时。那么我怎样才能提高性能以更快地做到这一点。如果可以,我可以使用子查询吗?我如何在这个查询中使用。以下是我正在使用的查询。
DECLARE @ORDERID int
DECLARE DEL_RelDataOFOrdeTab CURSOR FOR
SELECT ORDERID FROM orde_ WHERE CLIENTID = @ClientID
OPEN DEL_RelDataOFOrdeTab
FETCH NEXT FROM DEL_RelDataOFOrdeTab INTO @ORDERID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM AUTHORIZED WHERE ORDERID = @ORDERID
DELETE FROM AUTODISPALERTS WHERE ORDERID = @ORDERID
DELETE FROM DRIVER_REIMBURSEMENT WHERE ORDERID = @ORDERID
DELETE FROM FAXPOD WHERE ORDERID = @ORDERID
DELETE FROM GENERICFIELDS WHERE ORDERID = @ORDERID
DELETE FROM [Messages] WHERE ORDERID = @ORDERID
DELETE FROM ORDAUDIT WHERE ORDERID = @ORDERID
DELETE FROM OrderNotification WHERE ORDERID = @ORDERID
DELETE FROM OrderNotificationActions WHERE ORDERID = @ORDERID
DELETE FROM ORDERSPAID WHERE ORDERID = @ORDERID
DELETE FROM ROUTESERVERORDERS WHERE ORDERID = @ORDERID
DELETE FROM UnfinalizedOrders WHERE ORDERID = @ORDERID
print 'DELETING FROM ORDE_'
DELETE FROM orde_ where ORDERID = @ORDERID
PRINT @ORDERID
FETCH NEXT FROM DEL_RelDataOFOrdeTab INTO @ORDERID
END
CLOSE DEL_RelDataOFOrdeTab
DEALLOCATE DEL_RelDataOFOrdeTab
DELETE FROM orde_ WHERE CLIENTID = @ClientID
【问题讨论】:
-
@PareshJ 所以我需要在这个中使用什么
标签: sql-server performance sql-server-2008 stored-procedures