我有一個擁有超過3.8億條記錄的表。我有一個存儲過程,其中:在sql server表中刪除數據需要很多時間
- 刪除一些記錄。
- 插入一些東西。
整個程序大約需要30分鐘才能執行。在這DELETE
需要28分鐘。
刪除是一個簡單的聲明,東西沿着這些線路:
Delete a where condition_1 AND condition_2 AND condition_3
任何人可以幫助我嗎?
我有一個擁有超過3.8億條記錄的表。我有一個存儲過程,其中:在sql server表中刪除數據需要很多時間
整個程序大約需要30分鐘才能執行。在這DELETE
需要28分鐘。
刪除是一個簡單的聲明,東西沿着這些線路:
Delete a where condition_1 AND condition_2 AND condition_3
任何人可以幫助我嗎?
首先看看你的indexing和查詢..其實應該首先不要拿28 mins
?
這也許值得考慮看看database tuning和query optimization ...也許你也可以嘗試刪除記錄incrementally..something建議here ..
嗨不好,你能告訴我這種ioncremental方法是如何有用..比一次性?...請參閱我的帖子關於此:http://stackoverflow.com/questions/3893216/incremental-delete - 如何-IT-是益 – Relativity 2010-10-08 18:45:55
它可能有助於索引條件中的字段。如果您創建要刪除的行的視圖,需要多長時間?如果你可以加快視圖,你可以加快刪除速度。
條件是否過大? 也許使用索引可以幫助更快地刪除。
或者,您可以使用截斷而不是刪除。
CREATE [UNIQUE] INDEX indexName
ON table
(fieldName [ASC/DESC], ...)
選項ASC/DESC可以定義
條件不大......只是比較EX:c_number ='01102'。我不能截斷...因爲我不刪除這個表中的全部數據。 – Relativity 2010-10-07 15:56:40
如何你的表組織的訂單?你有什麼聚集索引和你有什麼非聚集索引?這三個條件究竟是什麼?
DELETE的行爲很像SELECT,因此它需要找到有資格刪除的行。爲此,它將使用與SELECT相同的技術,並且如果條件_1,條件_2和條件_3沒有覆蓋索引,則它們將觸發表格掃描,其將根據數據大小(380M) 。
表上的所有刪除觸發器? – 2010-10-07 15:54:54