İndeks Kullanımı
MenzeletDB, büyük tablolarda hızlı arama için bellek içi (in-memory) indeksler destekler.
İndeks Türleri
| Tür | En İyi Kullanım | Karmaşıklık |
|---|---|---|
| Hash | Eşitlik aramaları (WHERE id = 5) | O(1) |
| BTree | Aralık aramaları (WHERE fiyat BETWEEN 100 AND 500) | O(log N) |
İndeks Komutları
İndeks Listesi
INDEX LIST
Tüm aktif in-memory indeksleri gösterir.
Eşitlik Araması (Hash İndeks)
INDEX LOOKUP urunler urun_adi Klavye
urunler tablosunda urun_adi sütununda Klavye değerini arar.
Aralık Araması (BTree İndeks)
INDEX SCAN urunler fiyat 100 500
urunler tablosunda fiyat sütununda 100 ile 500 arasındaki değerleri arar.
Desteklenen İndeks Değer Tipleri
| Tip | Açıklama |
|---|---|
Int | Tam sayı |
Str | Metin |
Date | Tarih |
Timestamp | Zaman damgası |
Decimal | Ondalıklı sayı |
Uuid | 16-byte binary UUID |
Otomatik İndeks Kullanımı
MenzeletDB optimizer’ı WHERE koşullarında indeks kullanılabilir sütunları otomatik tespit eder:
- IndexLookupRule: Mantıksal planda
Filter + TableScankalıbını tespit eder ve varolan indeks üzerinden arama yapar - Boş sonuç optimizasyonu: İndeks araması boş dönerse
EmptyRelationile gerçek disk taraması yapılmaz - Epoch doğrulaması: İndeks versiyon numarası (epoch) ile tablo versiyon numarası (data_version) eşleşmezse indeks kullanılmaz (stale indeks koruması)
Bloom Filter
MenzeletDB, INSERT işlemlerinde duplicate key kontrolü için Bloom filter kullanır:
- Her tablo için
{tablo}.bloomdosyası oluşturulabilir - Kirschner-Mitzenmacher double hashing, FPR (False Positive Rate) ~%0.1
- Bincode ile diske kalıcı olarak saklanır (
save()/load()) - INSERT strict modda: Bloom filter “yok” derse kesin yok; “var” derse Parquet’ten doğrulanır