İndekslerle ilgili marjinal bir fayda daha


İndekslerin çok büyük yararları var. Onların hepsini burada anlatmaya kalkmayacağım. (Sadece indekslerin kullanımına ilişkin bir kitap yazmayı düşünüyorum aslında.) Ama öyle bir marjinal faydalarını fark ettim ki indekslerin yazmadan geçsem olmaz.

Anlatacağım fayda özel bir durum için geçerli: SERIALIZABLE isolation level’i kullanıyorsanız…

Serializable izolasyon seviyesi, okunan satırları transaction bitene kadar kilit altında tutan REPEATABLE READ’den bile katıdır. SERIALIZABLE’da okunan kayıtların ötesinde, okunan aralık kilit altına alınır.

Mesela transaction içinde bir select ifadesinde ‘where member_level between 1 and 3’ diye bir sorgu yaptığınızı düşünün. Bu sorgu da 100 membera ait kayıt döndürmüş olsun. REPEATABLE READ’de bu 100 kayıt transaction boyunca kilit altında tutulur ve üzerlerinde işlem yapılamaz. Ama eğer SERIALIZABLE kullanıyorsanız, bu yüz kayıtla ilgili işlem yapamayacağınız gibi aynı koşula uyan yeni bir kayıt da oluşturamazsınız. Yani member_level’ı 1, 2 ya da 3 olan yeni bir üye kaydı yapamazsınız. Ya da bir başka üyenin member level’ını 1, 2 ya da 3 olarak update edemezsiniz.

Peki iyi de bunun indekslerle ne ilişkisi var? Şöyle bir ilişkisi var: Eğer member_level kolonunda bir indeks varsa SQL Server kilitlemeyi key range (anahtar aralığı) olarak yapar. Yani bu indekste 1 ila 3 arası kısmı kilit altına alır. Böylece buraya kayıt eklenemez.

Peki ya indeks yoksa? Basit: Tüm tablo kilit altına alınır.

SERIALIZABLE transactionlarınızda where ifadelerinde geçen kolonlarda indeks olup olmadığına bakmakta fayda varmış, değil mi?

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