2010-10-07 286 views
2

我有一個擁有超過3.8億條記錄的表。我有一個存儲過程,其中:在sql server表中刪除數據需要很多時間

  1. 刪除一些記錄。
  2. 插入一些東西。

整個程序大約需要30分鐘才能執行。在這DELETE需要28分鐘。

刪除是一個簡單的聲明,東西沿着這些線路:

Delete a where condition_1 AND condition_2 AND condition_3 

任何人可以幫助我嗎?

+2

表上的所有刪除觸發器? – 2010-10-07 15:54:54

回答

2

首先看看你的indexing和查詢..其實應該首先不要拿28 mins

這也許值得考慮看看database tuningquery optimization ...也許你也可以嘗試刪除記錄incrementally..something建議here ..

+0

嗨不好,你能告訴我這種ioncremental方法是如何有用..比一次性?...請參閱我的帖子關於此:http://stackoverflow.com/questions/3893216/incremental-delete - 如何-IT-是益 – Relativity 2010-10-08 18:45:55

0

它可能有助於索引條件中的字段。如果您創建要刪除的行的視圖,需要多長時間?如果你可以加快視圖,你可以加快刪除速度。

2

條件是否過大? 也許使用索引可以幫助更快地刪除。

或者,您可以使用截斷而不是刪除。

CREATE [UNIQUE] INDEX indexName 
ON table 
(fieldName [ASC/DESC], ...) 

選項ASC/DESC可以定義

+0

條件不大......只是比較EX:c_number ='01102'。我不能截斷...因爲我不刪除這個表中的全部數據。 – Relativity 2010-10-07 15:56:40

8

如何你的表組織的訂單?你有什麼聚集索引和你有什麼非聚集索引?這三個條件究竟是什麼?

DELETE的行爲很像SELECT,因此它需要找到有資格刪除的行。爲此,它將使用與SELECT相同的技術,並且如果條件_1,條件_2和條件_3沒有覆蓋索引,則它們將觸發表格掃描,其將根據數據大小(380M) 。

相關問題