Google Analytics İzleme

08 Temmuz 2012

sql server - Otomatik guid üretmek (Uniqueidentifier)


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.

Kaynak:
http://www.webmahsulleriofisi.com/veritabani-2/sql/sql-de-otomatik-guid-uretmek-uniqueidentifier/

Hiç yorum yok: