1

Konu: CheckSum

Merhaba,

Biraz genel bir soru olacak ama MS SQL'de CheckSum ve TimeStamp hakkında bir giriş bilgisi verebilir misiniz?

/o---------------------o\
     www.haser.com
\o---------------------o/

2

Re: CheckSum

CheckSum, Binary_CheckSum ile komple row ya da 1-N field icin degisiklik olup olmadigini kontrol edebilirsin.

CheckSum ile Binary_CheckSum arasindaki fark, eger case insensitive database ise, CheckSum ornegin "ahmet" ve "Ahmet" icin ayni sonucu verirken, binary_checksum icin bu degisikliktir (yani binary_checksum en ufak degisiklige hassas).

CheckSum degisiklik yakalamanin yani sira uzun character alanlarin daha efektif indexlenmesinde kullaniliyor. Checksum sonucu integer. Onunla olusturulacak index daha kucuk ve o nedenle arama daha hizli. Yalniz sonuc integer oldugu icin degerler sinirli. Bunun anlami tamamen farkli iki degerin ayni checksum'a sahip olabilmesi demek. O nedenle CheckSum() farkli iken daha anlamli ve degisik oldugunu hemen soyleyebilirsin, ayni ise, alttaki degerin ayn olma 'ihtimali' var, kesin degil, degerin kendisi ile kontrol etmen gerekiyor. Books online'daki ornek guzel ondan dogrudan onu kullaniyorum:

ALTER TABLE Products
ADD cs_Pname AS checksum(ProductName)
CREATE INDEX Pname_index ON Products (cs_Pname)

-- Index aramalari hizlandiriyor
-- ancak sonuc hakikaten o mu diye kontrol var - 'ihtimal' meselesi
SELECT *
FROM Products
WHERE checksum(N'Vegie-spread') = cs_Pname
AND ProductName = N'Vegie-spread'


Row bazinda checksum yaparsan - binary_checksum(*) o zaman baska bir rowla bunu degisiklik icin kontrol edebilirsin ve mesela benzer olmasi gereken 2 tablo arasindaki degisik rowlari bulabilirsin (yine de ihtimal hikayesine dikkat et).


Timestamp ise yanlis verilmis bir isim, diger adi rowversion daha uygun, cunku zamanla uzaktan yakindan iliskisi yok. Database seviyesinde unique oldugu garanti edilen 8 bytes integer. Kullanimi basit ve etkili:
Update sirasinda timestamp'i where icine eklersen sen aldigindan beri degistirilmemis kayitlarla ugrasiyorsun demektir. Timestamp degismis ise, o arada baskasi update etmistir. Bir suru fieldin oldval(), curval() gibi degerlerini karsilastirmaktan daha hizli ve etkili. Daha kucuk bir where gitmsei gerekiyor backende. Ben genelde tum tablolarda primarykey + timestap kullanip wheretype'i de  4 olarak kullanmayi tercih ediyorum (duruma gore bazen sadece 1, 2 ve 3'u cok nadir kullaniyorum neredeyse hic).

3

Re: CheckSum

Çetin öncelikle çok teşekkür ederim. Yazın çok açıklayıcı oldu.

Ben genelde SPT kullanıyorum ancak updatable bir cursor oluşturmuyorum. Bu yüzden KeyFieldList ve WhereType kısımlarını da hiç kullanmıyorum.

Ancak CheckSum'ın indexlerde ki kullanımı hoşuma gitti.

Dersime biraz çalışayım. smile

Tekrar bilgilendirdiğin için teşekkürler

/o---------------------o\
     www.haser.com
\o---------------------o/