簡體   English   中英

在聚集索引,大表上的SQL Server中刪除性能

[英]DELETE performance in SQL Server on clustered index, large table

我有一個超過2000萬行的表,當我這樣做時:

DELETE [Table] WHERE ID = ?

這需要40秒以上。 ID列是群集的。

這是你可以期待的嗎? 還是可以優化這個?

除了他們的答案中包含的優點JNK之外,我看到的一個特殊殺手是當你從引用表中刪除一個或多個外鍵約束的行,以及引用表中的引用列時( s)沒有索引 - 你可以在接受刪除之前強制對每個表進行表掃描。

這將取決於你沒有告訴我們的很多因素......

刪除了多少行? 更多行顯然意味着更多時間。

還有其他指標嗎? 每個索引都需要更新,而不僅僅是群集。 如果要刪除10個索引,則需要大約10倍(非常粗略)。

還有其他活動嗎? 如果發生更新或插入,則很可能存在等待和爭用。

也很一般來講,幾秒鍾的操作需要的數量是高度依賴於你的硬件設置。 如果您在桌面計算機上運行此計算機而不是具有高性能陣列和12核心的服務器,則預期會有很大差異。

同時嘗試刪除批處理中的數據。

set rowcount 10000
delete [table] where id = ? 
while @@rowcount >0
begin
delete [table] where id = ? 
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM