Resim

MongoDB İndeksleme (Indexing) Nedir?

MongoDB İndeksleme (Indexing) Nedir?

İndeksleme, bir veritabanında veriye erişim hızını artırmak için kullanılan bir yöntemdir. Basitçe söylemek gerekirse, indeksler bir kitabın arkasındaki dizin veya telefon defterindeki alfabetik sıralama gibidir.

1. İndeksleme Nedir ve Neden Önemlidir?

Bir veritabanı koleksiyonunda indeks olmadığında, siz bir sorgu yaptığınızda (örneğin: {"yazar": "Ahmet Bilgin"}), veritabanı o yazarın kim olduğunu bulmak için koleksiyondaki her bir belgeyi tek tek taramak (Full Collection Scan) zorundadır. Bu, milyonlarca belgenin olduğu bir koleksiyonda çok yavaştır.

İndeksleme İle:

  • Veritabanı, sorguladığınız alana (örneğin yazar alanı) özel, sıralı bir dizin oluşturur.

  • Bir sorgu geldiğinde, tüm koleksiyonu taramak yerine doğrudan bu dizine bakar ve ilgili belgenin diskteki adresini saniyeler içinde bulur.

Sonuç: Sorgu süreleri milisaniyelere iner.

2. PyMongo ile İndeks Oluşturma (create_index)

MongoDB'de indeks oluşturmak için create_index() metodu kullanılır. Bu metot, sorgulama ve sıralama işlemlerinde sıkça kullandığınız alanlara uygulanmalıdır.

a) Tek Alanlı İndeks

En temel indeks türüdür. Sadece bir alan üzerinde oluşturulur.

Kullanım: create_index([("alan_adi", siralama_duzeni)])

from pymongo import ASCENDING, DESCENDING
# 1. 'yazar' alanı üzerinde artan (ASCENDING) sırada bir indeks oluştur
kitaplar_col.create_index([("yazar", ASCENDING)])
print("--- Tek Alanlı İndeks Oluşturuldu ---")
print("Artık yazar adına göre yapılan sorgular çok daha hızlı olacak.")

Not: ASCENDING (Artan, 1)ve DESCENDING (Azalan, -1)PyMongo'dan içe aktarılan sabitlerdir.

b) Bileşik İndeks (Compound Index)

Birden fazla alandan oluşan sorguları hızlandırmak için kullanılır. Bir arama yaparken hem yazar hem de yil alanlarını kullanıyorsanız bu idealdir.

# 'yayinevi' ve 'yil' alanları üzerinde bileşik indeks oluştur
# Önce yayinevine göre artan, sonra yıla göre azalan sırada sıralar.
kitaplar_col.create_index([
    ("yayinevi", ASCENDING),
    ("yil", DESCENDING)
])
print("\n--- Bileşik İndeks Oluşturuldu ---")
print("Yayinevi VE Yıl kriterlerini içeren sorgular hızlandırıldı.")

c) Benzersiz İndeks (Unique Index)

Bir alandaki değerlerin asla tekrar etmemesini sağlamak için kullanılır (SQL'deki PRIMARY KEY veya UNIQUE kısıtlamalarına benzer). Örneğin, her kitabın bir ISBN numarası varsa, bu numaranın eşsiz olması gerekir.

# 'isbn' alanı üzerinde, benzersiz (unique=True) bir indeks oluştur
kitaplar_col.create_index([("isbn", ASCENDING)], unique=True)
print("\n--- Benzersiz İndeks Oluşturuldu ---")
print("Aynı ISBN numarasına sahip ikinci bir belge eklenemeyecek.")

3. İndeksleri Görüntüleme ve Silme

İndeksleri Görüntüleme

Bir koleksiyonda hangi indekslerin aktif olduğunu kontrol edebilirsiniz:

print("\n--- Koleksiyondaki Tüm İndeksler ---")
for index in kitaplar_col.list_indexes():
    print(index)

İndeks Silmek

Eğer bir indeksin artık performans faydası sağlamadığına karar verirseniz, onu adıyla silebilirsiniz:

# Oluşturduğunuz indeksin adını list_indexes() çıktısından alın.
# İndeks adları genellikle alan adlarını içerir (örneğin: 'yazar_1')
# kitaplar_col.drop_index("yazar_1") 
# print("İndeks başarıyla silindi.")

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Yazılım Nedir?

Python print()