[MS SQL] "Delete From" mu yoksa "Truncate" mi daha avantajli?

Merhabalar,

@EmrBkts hocamin bir konu basliginda söyledigi :

“Yüksek ihtimalle fazla kayıt olduğundan sorgu zaman aşımına uğruyordur.isterseniz sorguyu parça parça uygululayıp deneyin.”

kafama takildi…

"Delete From" bildigim kadari ile tek tek siliyor. Bunun yerine o script icinde TRUNCATE kullanilsa daha iyi olmaz mi? “Delete From” kullanildiginda her Transaction’u LOG yapacagi icin, islem uzun sürebilir ve index’ler kaldigi yerden devam edip, index sayisi ayni kaliyor. Hatta islem uzun sürerse SQL Server baglantisi “Disconneted” durumuna düsebiliyor…

Oysa Truncate komutu Log tutmadan siliyor ve index i de tekrar 1 den baslatiyor…Fazla da sismemis oluyor table yapisi.

Ben sahsen eger tableleri bosaltmam gerekiyorsa “Delete From” yerine Truncate’nin kullanilmasi taraftariyim (tabiki bilincli olarak). Sizler ne düsünürsünüz?

Tesekkürler
Erkan Kaplan

Ilave:
Tabiki silme isleminde en büyük faktör CPU nun islem yapabilme süreci. Icinde 10000 veri satiri bulunduran bir tablenin ATOM CPU’lu bir PC de silme islemi icin gerekli süresi, atiyorum 1 saat ise, Intel i7 li bir CPU da yapacagi islem belki 3-5 dakika olabilir…Bu olayin ne Windows ile ne de SambaPOS hicbir alakasi yok. Bunuda parantez icinde belirtmek lazim.

2 Beğeni

iki durum arasındaki en büyük fark rollback.
eğer veriyi geri alma ihtimali yoksa truncate çok daha hızlı olur. çünkü loglama yapmaz. silerken herhangi bir koşul kontrol etmez.