[英]SQL Server - Poor performance of PK delete
我在SQL Server 2008 R2中有一個表,包含大約400行(幾乎沒有) - 它在主鍵上有一個聚簇索引(這是一個標識)。 該表通過約13個其他表的引用完整性(無級聯刪除或更新)引用。
Inserts / Updates / Gets幾乎是即時的 - 我們正在談論一瞬間(應該是預期的)。 但是,使用PK刪除時間長達3分鍾,我從未見過它超過1.5分鍾:
DELETE FROM [TABLE] WHERE [TABLE].[PK_WITH_CLUSTERED_INDEX] = 1
該指數嚴重分散--90%。 我重建並重新組織了該索引(以及該表中的其余部分),但我無法將其降至50%以下。
另外,我將數據庫備份/恢復到我的本地PC,我沒有刪除問題 - 不到一秒鍾。
我沒有做的一件事是完全刪除聚集索引並重新添加它。 這本身就是一個問題,因為SQL Server不允許您在其他表引用時刪除PK索引。
有任何想法嗎?
更新
我應該把這個包含在原帖中。 執行計划將“責備”置於聚集索引刪除--70%。 在引用該表的13個表中,執行計划表明沒有超過整個查詢的3% - 幾乎全部都是索引搜索。
如果刪除行,則數據庫必須檢查13個表中沒有一個引用該行。 那些引用要刪除的表的其他表上的外鍵列是否有足夠的索引?
好吧,我有一個答案......
首先,我幾乎用盡了上述問題中指出的所有選項以及相關聯的答案。 我沒有運氣似乎是一個微不足道的問題。
我決定做的是以下幾點:
基本上,我擦除並重新添加了聚簇索引。 我能夠從這里拿走的唯一一件事就是索引的一部分或物理存儲的位置是“損壞的”(我松散地使用這個術語)。
也許桌子被生產中另一個耗時的過程所鎖定。
另一個想法是,桌子上有刪除觸發器嗎? 它會導致這個問題嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.