SQL 2005 tablonuzda GUID (uniqueidentifier) kolonunda clustered indexle ilgili sorun yaşıyorsanız…


SQL 2005 tablonuzda GUID (uniqueidentifier) kolonunda clustered indexle ilgili sorun yaşıyorsanız… Başlık bu yazının amacını sanırım yeterince açıklıyor.

SQL Server’da özellikle dağıtık bir veritabanı yapısı (merge replication kullanan tasarımlarda olduğu gibi) tasarlıyorsanız, uniqueidentifier tipini kullanmak istersiniz. Uniqueidentifier tipindeki kolonlarda default değeri NEWID fonksiyonuyla oluşturursunuz. NEWID ile oluşturulan GUID değerlerinin MAC adresi olan network kartlı makinelerde çakışma yapmaması garanti edilmiştir. Böylelikle veritabanları arasında satır aktarımlarında ID çakışmaları sözkonusu olmaz.

Ama eğer uniqueidentifier tipindeki kolonunuzda bir clustered (sıralı) index varsa, önemli bir sorunla karşı karşıyasınız demektir: Oluşturulan her satır, NEWID rassal olarak değer oluşturduğundan ve verinin bu kolona göre sıralı olması gerektiğinden, tablonun herhangi bir yerine insert edilmek zorunda kalabilir. Bu da hem insert performansı üzerinde ve hem de zamanla indeksin yapısını bozduğundan select performansı üzerinde çok kötü bir etki yapacaktır.

SQL 2005’te bu durumu aşmanızı sağlayabilecek bir güzellik var: Kolonun default değeri olarak NEWID fonksiyonu yerine NEWSEQUENTIALID’yi kullanabilirsiniz. Yine bir GUID üretilir. Ama bu yeni değerin özelliği, kolon için önceden oluşturulmuş GUID’lerden büyük olmasının garantilenmesidir. Böylelikle clustered index’te bu kayıt her zaman sona eklenecektir. Yani daha önce bahsi geçen performans sıkıntılarının sebebi ortadan kalkmış olur.

Bu yazı SQL Server içinde yayınlandı. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s