如何在SQLSERVER中快速有條件刪除海量資料

2021-04-02 23:46:23 字數 927 閱讀 3123

如何在sqlserver中快速有條件刪除海量資料     來自 great_domino的 blog

最近有個朋友問我,他說他在sqlserver刪除幾百萬到幾千萬資料是顯的很慢,幫他分析了一下,提了一些以下意見,或許對很多人有用,再者也好長沒寫過blog了,一起**一下

如果你的硬碟空間小,並且不想設定資料庫的日誌為最小(因為希望其他正常的日誌希望仍然記錄),而且對速度要求比較高,並清除所有的資料建議你用turncate table1,因為truncate 是ddl操作,不產生rollback,不寫日誌速度快一些,然後如果有自增的話,恢復到1開始,而delete會產生rollback,如果刪除大資料量的表速度會很慢,同時會占用很多的rollback segments,同時還要記錄下g級別的日誌 ;當然如果有條件刪除比如where time<'2006-3-10' 怎麼辦,能不能不記錄日誌用delete,回答是不行的,sql server 引擎在設計上就會對 delete 操作進行日誌記錄。至今沒有辦法強制制定某一些語句不記錄到日誌中,如果在執行 delete table1 where time < '2006-3-10' 由於涉及的記錄比較多,所以日誌記錄也相應很大(3-4g),如果可行,我建議用以下方式:

選出您所需要保留的記錄到新的表。如果您使用 full recovery mode

根據select into的記錄數,日誌可能會比較大

select * into table2 from table1 where time > = '2006-03-10' 

然後直接truncate table1。無論何種恢復模式都不會進行日誌記錄

truncate table table1

最後對table2進行改名為table1

ec sp_rename 'table2', 'table1'

如何在jsp中連線SQLserver資料庫

1 載入jdbc驅動程式 2 建立連線物件connection的例項物件,這裡的url就是sqlserver在電腦中位址,一般都是jdbc sqlserver localhost 1433 埠要和自己電腦上的一致 至於username和password就是資料庫的登入名和密碼了 3 執行sql語句,...

如何在SQL Server中鎖定某行記錄

select au lname from authors with rowlock 鎖定提示 描述 holdlock 將共享鎖保留到事務完成,而不是在相應的表 行或資料頁不再需要時就立即釋放鎖。holdlock等同於serializable。nolock 不要發出共享鎖,並且不要提供排它鎖。當此選項...

如何在SQL Server 2005中實現資料同步

現在假如有乙個這樣的應用,有乙個遊戲服務商在推廣乙個大型遊戲的時候,現在架設了多台資料庫伺服器,為了資料的便於統計,最終這些資料可以自動的轉入到指定儲存的另一台伺服器中,這時候就會面臨著乙個這樣的問題,如何保證這些多台資料庫之間的資料的同步呢?我們就可以使用複製的辦法,複製是將一組資料或資料庫物件從...