- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
İ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.
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.
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.
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.
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ı.")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şturkitaplar_col.create_index([("isbn", ASCENDING)], unique=True)print("\n--- Benzersiz İndeks Oluşturuldu ---")print("Aynı ISBN numarasına sahip ikinci bir belge eklenemeyecek.")
Bir koleksiyonda hangi indekslerin aktif olduğunu kontrol edebilirsiniz:
print("\n--- Koleksiyondaki Tüm İndeksler ---")for index in kitaplar_col.list_indexes():print(index)
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
Yorum Gönder