2010-11-22 18 views
3

Düşmeden önce her zaman büyük bir tabloyu kesmemiz gerektiği söylenir, performansı artırır. Bu doğru mu?Bırakmadan önce büyük bir tabloyu kesmemiz gerekiyor mu?

+1

"Kimin söylediği" deniliyor? – skaffman

+2

"performansı artırır" - Hangi yolla? Tüm veritabanının performansını mı kastediyorsunuz, yoksa bu tablonun silinmesi daha hızlı mı gidecek? – darioo

+0

Ayrıca bkz. Http://dba.stackexchange.com/questions/4163/why-use-both-truncate-and-drop – rogerdpack

cevap

1

Bir şeyler yanlış giderse geri dönmek isteyip istemediğinize bağlı olarak değişir. Veri silme işlemi, siz değişiklik yapana kadar veritabanının işlem günlüklerine karşı silme işlemini siler.

Kesilme, bu günlükleri kaydetmeden tablodaki tüm verileri siler, böylece bunu yaparken önemli bir performans artışı olabilir. Geri dönüş yolu olmadığından, ne yaptığınızı bildiğinizden emin olun. Yüksek su işaretini sıfırlamak iyi bir fikir olabilir.

+1

'Bırak tablosu 'günlükleri kaydetmiyor, değil mi? OP, "silme" hakkında hiçbir şey söylemedi. – skaffman

+0

İyi nokta. Kesenin kendisinin performansından bahsettiği varsayımı yaptım. Artık bana alay etmeye ve evime taş atmaya devam edebilirsiniz. :) – Jason

+0

drop table, kayıtları kaydedebilir - örneğin "flashback", yapılandırılmış/etkinleştirilmişse, düşürülmüş bir tabloyu geri yükleyebilir. – rogerdpack

0

+4

iyi, gerçekten değil - masa düştüğünde * * HWM yok. –

10

IMO genelde bir tabloyu düşürmek isterseniz DROP uygundur. Bu alan TRUNCATE ile aynı şekilde serbest bırakılacak ve atomik olma avantajına sahip olacaktır (hiçbir sorgu "boş" tablosunu görme fırsatına sahip olmayacaktır).

10g + 'dan itibaren, bir düşürülmüş tablo hemen silinmeyecektir: yeterli alan varsa recycle bin içine konacaktır. Önce bir tabloyu kırpırsanız, geri dönüşüm kutusuna hiç veri kalmaz. Bu yüzden ilk önce (?) Kesilmesi söylendi olabilir.

Her durumda, geri dönüşüm kutusunu atlamak isterseniz DROP TABLE your_table PURGE numarasını verebilirsiniz ve bu ifade atomik olacaktır.

İlgili konular