MSSQL Server Hash Index

Hash index, MemoryOptimized Tables (Bellek İyileştirilmiş Tablolar) üzerinde kullanılan özel bir indeks türüdür. Bu indeks, belirli bir anahtar değerine çok hızlı bir şekilde erişim sağlamak için hashing algoritmalarını kullanır. Hash index’ler, özellikle eşitlik tabanlı sorgular (örneğin, WHERE column = value) için optimize edilmiştir. Hash index yalnızca InMemory OLTP özelliği etkinleştirilmiş tablolarda kullanılabilir. Disk tabanlı tablolar için desteklenmez. Hash index, = operatörünü kullanan sorgularda çok hızlı performans sunar.

Hash Index Nasıl Çalışır?
SQL Server, anahtar değeri üzerinde bir hash algoritması çalıştırarak bir hash değeri üretir. Bu hash değeri, önceden tanımlanmış hash bucket’lar içinde bir konuma atanır. Veriler sorgulandığında, hash fonksiyonu kullanılarak hedef hash bucket hızlı bir şekilde bulunur.
Eğer birden fazla veri aynı bucket’ta bulunuyorsa (hash çakışması), SQL Server doğrulama yaparak doğru kaydı seçer.
Hash Index’in Avantajları
Büyük veri kümelerinde eşitlik tabanlı sorgular için olağanüstü hızlı performans sağlar. Hash bucket sayısı, bellek kullanımını kontrol etmenize olanak tanır. Karmaşık hashing algoritmaları SQL Server tarafından yönetilir ve kullanıcıdan gizlenir.
Hash Index’in Dezavantajları
Sadece Eşitlik Sorguları için Etkilidir: >, <, BETWEEN gibi sıralama tabanlı işlemler için uygun değildir. Eğer iki farklı anahtar değeri aynı hash bucket’a düşerse, SQL Server bu çakışmayı çözmek için ek işlemler yapar (performans düşebilir). Hash bucket sayısı indeks oluşturulduktan sonra değiştirilemez. Yanlış bucket_count değeri seçilirse performans etkilenebilir. Hash index yalnızca bellek iyileştirilmiş tablolarla kullanılabilir.

Hash Index Kullanımı
Hash index oluştururken, bucket sayısı (bucket_count) belirtilmelidir. Örnek bir oluşturma işlemi:

CREATE TABLE MyMemoryTable
(
ID INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 10000),
Name NVARCHAR(100) NOT NULL,
Age INT NOT NULL
) 
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMAAND_DATA);
SELECT  
FROM MyMemoryTable 
WHERE Name = 'Value';

BUCKET_COUNT: Hash bucket sayısını belirtir. Bu değer, tablodaki benzersiz anahtar sayısına yakın bir sayı olmalıdır. Çok düşük seçilirse çakışmalar artar, çok yüksek seçilirse bellek israfı olur.

Hash Index Kullanım İpuçları
1. Tablodaki benzersiz satır sayısını tahmin edin ve buna göre bir bucket_count belirleyin.
2. Sadece = işleçleri için hash index’lerin etkili olduğunu unutmayın.
3. Eğer sıralama veya aralık sorguları gerekiyorsa, nonclustered index veya diğer indeks türlerini kullanmayı düşünün.

Hash Index ile Performans Kıyaslaması
Eşitlik sorguları açısından, hash index genellikle geleneksel nonclustered indekslerden daha hızlıdır. Ancak hash index’in dar bir kullanım alanı olduğu ve belirli durumlarda diğer indeks türleriyle birlikte kullanılması gerektiği unutulmamalıdır.

Bu makalede Hash Index konusuna değinmiş olduk. Başka bir makalede görüşmek dileğiyle.

De ki: “Şüphesiz benim namazım, ibadetlerim, dirimim ve ölümüm alemlerin Rabbi olan Allah’ındır.” En’am Suresi, 162. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir