我想從一個有2000萬條記錄的巨大表中使用T-SQL刪除幾千條記錄。該表根據它有大約20個觸發器,並且全部指的是或多或少相似的巨大表格。即使使用標識列值,刪除也需要很長時間。如何在不禁用觸發器的情況下刪除這些記錄,或者必須禁用最小數量的觸發器?請幫忙。從大約20個觸發器的表中刪除記錄 - SQL
0
A
回答
0
請嘗試以下
添加以下SPS
Create PROCEDURE [dbo].[sysUserContextSet] --#1
@user_name varchar(14),
@terminal varchar(10) = NULL
AS
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
declare @context varbinary(128)
set @context = CONVERT(varbinary(128), isNull(@user_name,'') + SPACE(14 - len(isNull(@user_name,'')))+ isNull(@terminal, '') + space(10 - len(isNull(@terminal, ''))))
set context_info @context
Create PROCEDURE [dbo].[sysUserContextClear] --#2
AS
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DELETE FROM sysUserContext WITH (ROWLOCK) WHERE [email protected]@SPID
exec sysuserContextSet 'username'
delete ...
exec sysuserContextClear
0
對我來說,這聽起來像你的問題是與它正在刪除這些行的時間。
我同意贊恩,觸發器是有原因的,我不會禁用它們。
觸發器是否花時間?你能做任何事情來加速觸發器嗎?
你用來識別和刪除初始行的sql是什麼?
我遇到了更新類似的問題。我最終分批進行了更新。你可以批量刪除
1
我曾經爲刪除數據的類似問題。我在桌上有三億六千萬行。它有「A」刪除觸發器來執行參照完整性。我試圖刪除約6000萬條記錄。我可以採用兩種方法,禁用刪除觸發器或限制一次嘗試刪除的刪除數。我必須一次限制刪除10000個記錄。我認爲這與不會超載tranlog有關。
0
這些觸發器是有原因的。禁用它們是一個糟糕的主意。
我會做的是首先看看觸發器,以確保它們以基於集合的方式運行(如果您在觸發器中逐行進行操作,那麼無論如何,幾千條記錄都需要很長時間
假設您的觸發器都被正確寫入,您可能還會遇到級聯刪除或FKs的問題,這些問題需要您在多個表中查找子記錄(我們有一個包含超過100個FK來檢查)如果你不能加速觸發器,那麼最好的辦法是在一個循環中小批量地工作,爲循環中的每一輪提交事務,這樣表就不會被鎖定,然後如果可能的話,在關閉期間進行處理小時。受影響的FK表越多,您需要一次處理的批量越小。
或者您可以設計您的數據庫以進行軟刪除(將記錄標記爲不活動,然後克里特僅顯示活動記錄的視圖)。這樣你就不必刪除了。
相關問題
- 1. SQL Server觸發器從多個表中刪除一條記錄
- 2. 刪除SQL Server觸發器 - 哪些記錄在刪除表中?
- 3. 觸發器在刪除記錄之前
- 4. MySql觸發器刪除同一個表中的子記錄
- 5. 刪除觸發器不插入記錄
- 6. 創建觸發器刪除記錄
- 7. SQL觸發器,參照已刪除的記錄的ID
- 8. 要從表中刪除超過20的記錄
- 9. 從2個表中刪除記錄
- 10. 刪除記錄而不是刪除觸發器
- 11. 替代刪除觸發器以跟蹤已刪除的記錄
- 12. SQL觸發器僅在刪除期間返回一條記錄
- 13. SQL歷史記錄表和觸發器
- 14. 從多個Access表中刪除記錄
- 15. 刪除觸發器SQL 2005
- 16. 刪除SQL觸發器
- 17. SQL Server 2005 - 刪除表觸發器?
- 18. SQL服務器多表記錄刪除
- 19. 通過觸發器更新pl/sql中多個表的記錄
- 20. 從SQL Server中的多個表中刪除記錄
- 21. 如何在SQL中創建刪除觸發器從子表中刪除一條記錄更新父表中的記錄數?
- 22. MySQL從2個表中刪除記錄
- 23. 從表中刪除多個記錄
- 24. 從表中刪除記錄的問題
- 25. 刪除sql表中的重複記錄
- 26. SQL Server進行刪除觸發器刪除其他表中的記錄與程序
- 27. 刪除觸發器
- 28. 觸發器刪除postgresql中的過去記錄
- 29. 從表sql服務器中刪除數百萬條記錄
- 30. 如何觸發刪除記錄
爲什麼你需要一個桌子上的20個觸發器? –
'如何在不禁用觸發器的情況下刪除這些記錄:刪除記錄。等待。 '或者不得不禁用最少數量的觸發器':找出哪些觸發器可以在刪除過程中安全關閉,同時保持系統的數據完整性。關閉它們,刪除記錄,然後重新打開它們。我不是諷刺;我們無法幫助您,因爲我們不知道您的數據庫中發生了什麼。 –
你是說你想刪除這些記錄而不關閉觸發器,但你需要繞過它們?在我推薦任何東西之前,我需要更多的信息。有機會你有這些觸發器的原因,並可能不想繞過它們。 – Zane