07 Aralık 2006

Delete Ve Truncate Komutları Arasındaki Fark

Bazen çözüme ulaşmak için kullanımı aynı gibi görünen farklı yöntemler kullanıyoruz. DELETE ve TRUNCATE ikilisi de bunlardan biri aslında. Peki ikisi arasında ne fark var? Aslında bu farklar bir hayli fazla.

DELETE komutunda işlem sonunda satırlar fiziksel olarak silinir ve satır bazlı olarak loglanır. Bu yüzden yüksek miktarda satıra DELETE işlemi sık periyotta uygulandığında log file zamanla büyük boyutlara ulaşacaktır. TRUNCATE komutu da loglama yapar;fakat farklı bir yolla. TRUNCATE komutu işleme tabi tutulan tablodaki kayıtları bulunduğu pagefile ları işaretler. Aslında TRUNCATE işleminde data silinmeyip daha sonra kullanılmak üzere işaretlenmektedir. Bu da TRUNCATE işleminin DELETE işlemine göre çok daha performanslı çalışmasını sağlar.

DELETE komutu Foreign Key veya diğer Constraint lere zarar vermeden kayıtları siler.
Foreign Key Constraint i olan bir tabloya TRUNCATE işlemi uygulanamaz. Önce Constraint lerin silinip, TRUNCATE işleminden sonra tekrar tanımlanması gerekecektir. Ayrıca bu işlemi yapacak olan user ın db_owner,ddl_admin veya owner haklarından birisine sahip olması gerekir.

TRUNCATE işlemi sonunsa Identity alan değerleri ilk değerlerinden tekrar başlar. Örneğin 1'den başlayan Identity değeri olan ve içerisinde 100 satır bulunan bir tablo olduğunu varsayalım. TRUNCATE işlemi sonunda boş tabloya bir satır eklediğimizde alacağı değer 1 dir, fakat DELETE işleminden sonra bu değer 101 olacaktır.

2 yorum:

Adsız dedi ki...

Merhabalar;

Blogunuzu begendim elinize sağlık güzel paylaşımlar.

"TRUNCATE komutu da loglama yapar;fakat farklı bir yolla. TRUNCATE komutu işleme tabi tutulan tablodaki kayıtları bulunduğu pagefile ları işaretler. Aslında TRUNCATE işleminde data silinmeyip daha sonra kullanılmak üzere işaretlenmektedir."

Kısmını anlamadım..

Nasıl bi loglama yapar?

daha sonra bu kayıtları nerden nasıl ulaşarak hangi amaçla kullanırım.
Açıklarsanız sevinirim.
İyi çalışmalar;
Fatih UYDURAN
fatihuyduran@hotmail.com

Harun PEKŞEN dedi ki...

Merhaba,

Bu logların servis seviyesinde olduğunu düşünüyorum, kullanıcının ulaşabileceği bir log olduğunu sanmıyorum.

Kolay gelsin.

Harun