SQL Index Yapısı ve Kullanımı

Index Nasıl Çalışır?

Indexleme işlemini bir örnek üzerinden açıklamak, çalışma mantığını kavramaya yardımcı olacaktır. 500.000 kayıt bulunan bir user tablomuz olduğunu varsayalım. Bu tablodaki email sütunuyla ilgili oldukça fazla sorgulama/okuma işlemi olduğunu düşünelim.

Örnek veri seti
SELECT * FROM users WHERE email = 'ira.wolford@ntlworld.com';
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_user_names ON people (last_name, first_name);
DROP INDEX idx_users_email

Indexler Ne Zaman Kullanılmalı?

Index’ler çoğu zaman performans açısından fayda sağlıyor. Burada dikkat edilmesi gereken hüsus index’lenen sütunun doğru seçilmesidir. Listede bulunan maddelerin ortak kümesi “sorguda çok sık kullanılan sütunlar” ya da “çok hızlı ulaşılması amaçlanan veriler” için geçerli olmasıdır.

  • Sorgularınız istenilenden çok daha geç cevap dönüyorsa,
  • Sorgularınızda koşul içerisinde sürekli kullanılan bir sütun var ise,
  • Sorgulanan sütunda çok farklı değerler var ise ve fazla NULL değer içermiyorsa,
  • Bir veya daha fazla sütun, sıklıkla bir WHERE ifadesiyle veya bir join işlemi ile birlikte kullanılıyorsa

Indexler Ne Zaman Kullanılmamalı?

Index’lerin ana amacı veritabanının performansını arttırmak olsa da, kullanmamanın daha yararlı olacağı ya da çok dikkatli kullanılması gerektiği durumlar vardır. Bunlar sadece önerilerdir, kullanım şekilleri ve sorgu tiplerine göre bazı şartlar görmezden gelinebilir.

  • Küçük tablolar için kullanımı önerilmez.
  • Sorgu koşulu olarak çok sık kullanılmayan sütunlar için kullanımı önerilmez.
  • Çok fazla “NULL” verisi bulunan tablolarda kullanımı önerilmez.
  • lgili sütunda aynı veriden fazla sayıda var ise, index kullanımı tavsiye edilmez. Örneğin; “email” alanının yüzde 20'si aynı mail adresi verisi içeriyor ise performansı istenilen kadar verimli olmayacaktır. (Madde için çok teşekkürler, Muhammed Hilmi Koca)
  • Yazma oranı, okuma oranından çok daha fazla olan tablolarda önerilmez.
  • Sık ya da büyük toplu güncelleme veya ekleme işlemlerine maruz kalan tablolarda kullanımına çok dikkat edilmelidir.
  • Sıklıkla değişikliğe uğrayan tablo sütunlarında kullanımına dikkat edilmelidir.

Index Kullanırken Nelere Dikkat Edilmeli?

Gereksiz index kullanımı, gereksiz yük getirecektir. İlk olarak veriyi yazarken ekstra bir işlem adımı eklemiş oluruz. Indexlerimiz çoğaldıkça yazma hızımız azalacaktır. Bir diğer performans faktörü ise index sayımız arttıkça gereksiz indexlere göre de tarama yapılabileceği için okuma hızımızdan da istediğimiz performansı alamayabiliriz.

--

--

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev