Laptop displaying source code with dual screens for software development.

Veritabanı Performansının Anahtarı: İndeksler

Veritabanı sistemlerinde performans, yalnızca donanım kaynaklarıyla değil, verilerin erişim biçimiyle de doğrudan ilişkilidir. Özellikle büyük veri kümeleri üzerinde yapılan sorgularda, doğru indeks stratejisi uygulanmadığı takdirde sorguların yanıt süreleri saniyelerden dakikalara çıkabilmektedir. Bu yazı, veritabanı indekslerinin ne olduğunu, nasıl çalıştığını ve etkili bir şekilde nasıl yapılandırılması gerektiğini teknik bir bakış açısıyla ele almaktadır.


İndeks Nedir?

Veritabanı indeksleri, tablolar üzerinde arama ve sıralama işlemlerini hızlandırmak amacıyla oluşturulan veri yapılarıdır. Temel olarak, bir veya birden fazla sütun üzerindeki verilerin sıralı bir kopyasını barındırırlar. Bu yapı sayesinde veritabanı motoru, doğrudan ilgili verilere erişebilir ve tabloyu satır satır taramak zorunda kalmaz (Full Table Scan).


İndeks Türleri

1. Tekil (Single-Column) İndeks

Sadece tek bir kolona uygulanır. En yaygın kullanılan indeks türüdür.

CREATE INDEX idx_customer_name ON customers(name);

2. Bileşik (Composite) İndeks

İki veya daha fazla sütunu kapsar. Bu indeksler, genellikle çok sütunlu WHEREORDER BY veya JOIN koşullarında kullanılır.

CREATE INDEX idx_order_customer_date ON orders(customer_id, order_date);

3. Benzersiz (UNIQUE) İndeks

İndekslenen sütunda tekrar eden veri bulunmasına izin vermez. Genellikle kimlik veya kullanıcı adı gibi alanlarda kullanılır.

CREATE UNIQUE INDEX idx_username ON users(username);

4. Tam Metin (FULLTEXT) İndeks

Metinsel veriler üzerinde anahtar kelime araması yapılmasını sağlar. MyISAM ve InnoDB motorları tarafından desteklenir.

CREATE FULLTEXT INDEX idx_article_content ON articles(content);

İndekslerin Faydaları

  • Sorgu Performansında Artış: Özellikle WHEREJOINORDER BY ve GROUP BY içeren sorgular büyük ölçüde hızlanır.
  • Veri Getirme Süresinde Azalma: Gereksiz disk I/O işlemleri en aza indirilir.
  • Büyük Tablolarda Erişim Maliyetini Düşürür: Tablo satır sayısı büyüdükçe, indeksin etkisi daha belirgin hale gelir.

İndeks Kullanımında Dikkat Edilmesi Gerekenler

1. Fazla Sayıda İndeks Performansı Düşürebilir

Her eklenen indeks, INSERTUPDATE ve DELETE işlemlerinde ek bir maliyet oluşturur. Gereksiz indeksler yazma performansını olumsuz etkileyebilir.

2. Doğru Sütunlara İndeks Eklenmeli

Sorgu planları analiz edilmeli ve sadece sık filtrelenen veya sıralanan sütunlara indeks tanımlanmalıdır.

3. Sıralama Önemlidir

Bileşik indekslerde sütun sıralaması önemlidir. WHERE a = ? AND b = ? sorgusu için (a, b) sıralaması doğru iken, (b, a) farklı sonuç verebilir.

4. Düzenli Olarak ANALYZE ve EXPLAIN Kullanılmalı

İndekslerin ne kadar etkili olduğunu görmek için EXPLAIN planı analiz edilmeli, gerekirse ANALYZE TABLE komutu ile istatistikler güncellenmelidir.


Gerçek Dünya Örneği

Problem:
Bir muhasebe uygulamasında, cari_firma tablosu ile ilişkili cari_firma_hareketleri tablosu bulunmaktadır. Listeleme sırasında her firma için son bakiyenin hesaplanması büyük bir performans sorunu yaratmaktadır.

Çözüm:
Aşağıdaki gibi bir bileşik indeks ile bu sorgular optimize edilebilir:

CREATE INDEX idx_cari_id_tarih ON cari_firma_hareketleri(cari_firma_id, islem_tarihi DESC);

Bu indeks sayesinde, her cari_firma_id için en son hareket hızlı şekilde bulunabilir ve toplam bakiye hesaplaması tetiklenmeden sadece son satırdan bakiye okunabilir.


Sonuç

Veritabanı indeksleri, yazılım performansı üzerinde doğrudan etkili olan kritik bir unsurdur. Doğru tanımlanmış indeksler, sorgu sürelerini dramatik şekilde azaltabilirken, kötü yapılandırılmış veya gereksiz indeksler sistem kaynaklarını israf eder. Her veritabanı yöneticisi ve geliştirici, indeks kullanımını bilinçli ve planlı şekilde ele almalı, ihtiyaç halinde veri erişim desenlerine göre yeniden yapılandırmalıdır.

Share this content: