SQL Server’da Sıralı GUID Oluşturmak – NewSequentialID
GUID dünya üzerinde kim,nerede, ne zaman oluşturulsa oluştursun bir benzeri olmayan 128 Bitlik(16-Byte) bir Unique Identifier (Benzersiz Kimlik) ‘dır. Küresel anlamda bir benzersizlik vaad eden GUID (Globally Unique Identifier) INTEL firması tarafından bulunmuştur.
SQL Server‘da GUID değeri NEWID() fonksiyonu ile elde edebiliyoruz. SQL Server 2008 ile birlikte gelen ve diğer sürümlerde de desteklenen NewSequentialID() fonksiyonu ise bize sıralı bir GUID değeri vermektedir. NewSequentialID() fonksiyonu her çalıştırıldığında sonra GUID değerinden daha büyük bir GUID değeri vereceğini taahhüt eder.
Peki neden sıralı bir GUID değerine ihtiyacımız olabilir?
Günümüzde çok fazla veri kayıt altına alınmaktadır. Veritabanını tasarlayan DBA veya Developer INT veri türünden hatta BIGINT veri türünden daha büyük bir sayıya ulaşabileceğini düşündüğü tablolarda Clustered Index Key olarak uniqueidentifier veri türü kullanmak durumunda kalabilir. Eğer oluşturulan GUID rastgele olarak kullanılırsa, sıralı olarak kullanılmazsa tabloda Fragmantation ve Page Split meydana gelir. Performans açısından olumsuz yönde etki edecektir.
Bu sorunu aşmak için SQL Server NewSequentialID() fonksiyonu ile bizlere sıralı GUID oluşturma imkanı vermektedir.
Not: NewSequentialID() sadece Default constraint olarak kullanılmaya izin vermektedir. NEWID() gibi Select ile birlikte kullanılmaya izin vermez.
[sql]
CREATE TABLE [dbo].[TBL_GUID](
[ID] [uniqueidentifier] DEFAULT (newsequentialid()),
[Value] [varchar](10) NULL
)
[/sql]
Oluşturduğumuz tabloya kayıtlarımızı ekledikten sonra sorguladığımızda GUID değerin otomatik arttığı görülmektedir.
NOT: İşletim sistemi restart’ından sonra NewSequentialID() ile oluşturulan GUID değerin sırasının değişme ve baştan başlama ihtimali vardır. Değer GUID olduğu için benzersizlik açısından sorun teşkil etmeyecektir.