簡體   English   中英

在SQL Server中使用On刪除級聯時的性能問題

[英]Performance Issue while using On delete cascading in sql server

我有一個只有10行的父表,

但是它們各自的子表將具有100K記錄,對於父表中的1個ID,我們在子表中具有10K記錄。

當我在父表上執行刪除命令時,它也會從子表中刪除記錄,但是刪除所有10K記錄大約需要5分鍾。

所以我的問題是,當對表有級聯作用時,從子表中刪除記錄的最佳實踐是什么。

10K條記錄只是某些ID的示例,我們有數百萬條記錄需要刪除。

假設SQL Server在刪除時可以使用索引,則在子表中的外鍵列上放置索引可能會加快刪除速度。 例如:

parent (id, col1, col2, ...)
child  (id, parent_id, ...)

CREATE INDEX ON child (parent_id);

這樣的索引可以讓SQL Server在給定父記錄的情況下快速查找每個子記錄。

這個評論太長了。

刪除表中的數千行需要花費時間。 刪除必須:

  • 找到要刪除的行。
  • 更改數據頁面上的數據。
  • 記錄更改。
  • 修改索引。
  • 執行觸發器(如果有)。
  • 刪除其他表中的相關行(如果有)。

這可能是相當昂貴的。

鑒於父ID的數量很少,我認為您可以通過按父ID划分子表來加快此速度。 父ID上的聚集索引也可能會有所幫助-但這可能會影響插入性能。

暫無
暫無

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

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