Bu makalede MSSQL Server Unique Index yapısını detaylarıyla birlikte görmüş olacağız. Verinin tekilliğini sağlamak için kullanılır. Veri tekrarını engeller ve tanımladığımız kolona göre veri çekmeyi hızlandırır. Tablomuza bir primary key veya unique constraint tanımladığımız zaman otomatik unique index tanımlanır. Bu index’i birden fazla kolona tanımladığımız zaman tekillik tek kolon üzerinden değil de tanımlandığı kolonlar üzerinden oluşuyor. Tanımlandığı kolona sadece bir kere null değeri eklenebilir. Çünkü ikinci Null değeri olması tekilliği bozmaktadır. Hem clustered hem de non-clustered index’ler unique olarak tanımlanabilir.
CREATE UNIQUE INDEX AK_IndexName ON TableName (Column1)
---------------------
CREATE UNIQUE NONCLUSTERED INDEX [AK_IndexName ] ON [Person].[Person]
(
[BusinessEntityID] ASC
)
---------------------
CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex] ON [dbo].[ErrorLog]
(
[ErrorLogID] ASC
)
Kısacası indeksleme alanı olarak seçilen sütundaki verilerin tekrar kullanılmaması için bu yapı kullanılır. Veriye erişim hızını arttırır. Bu şekilde sanki clustered index yapısında olduğu gibi tekillik sağlanır.
Index tanımlanan kolonda unique yapısını bozacak bir değer varsa aşağıdaki hatayı almaktayız.

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name ‘Person.Person’ and the index name ‘NonClusteredIndex_UNIQUE ‘. The duplicate key value is (A.).
The statement has been terminated.
UNIQUE Index olan bir alana yinelenen kayıt giremezsiniz şeklinde bir uyarı ile karşılaşırız.
Not: Eğer bir sütundaki değerler tekrar edebiliyorsa ve benzersiz olma zorunluluğu yoksa, non-unique index kullanmak mantıklıdır. En büyük avantajları: Sorguları hızlandırır (WHERE, JOIN, ORDER BY, GROUP BY) ,Tekrarlayan verilerde kullanılabilir, Foreign key sütunlarında performansı artırır, Büyük veri tablolarında sıralama işlemlerini hızlandırır. Şöyle düşünmek lazım 100 bin kişi üzerinde bir arama işlemi ile 5 bin kişi üzerindeki arama işlemi aynı değildir.
NOT: Bir composite index (bileşik indeks), birden fazla sütunu içeren bir indeks türüdür. Eğer bir composite index’in unique (benzersiz) olmasını istiyorsanız, aşağıdaki şartları sağlamalısınız.
Tek tek sütunların unique olması gerekmez, ancak indeks içindeki tüm sütunların birleşimi (kombinasyonu) benzersiz olmalıdır.
Yani, her satır için aynı sütun değer kombinasyonu tekrar etmemelidir. Tek tek sütunların unique olması gerekmez, ancak bileşik indeks içindeki tüm sütun kombinasyonları benzersiz olmalıdır. İncluded kolonlar için ilgili unique yapı kontrolü geçerli değildir. Dahil edilmezler.
Not: Loginin index ve statistics oluşturması için ddl yetkisinin olması yeterlidir.
Veritabanı altında herhangi bir sorguda index force edilebilir.
Select*from tableName with (INDEX=IndexName)
Bu makalede unique index konusuna değinmiş olduk. Başka bir makalede görüşmek dileğiyle.
“Yavrucuğum, namazını özenle kıl, iyi olanı emret, kötü olana karşı koy, başına gelene sabret. İşte bunlar, kararlılık gerektiren işlerdendir.”Lokman-17