Indexy dramaticky zrychlují dotazy v MongoDB.
Typy¶
- Single field
- Compound
- Multikey (arrays)
- Text
- Geospatial
- TTL (auto-delete)
Příklady¶
db.orders.createIndex({userId:1,status:1,createdAt:-1}) db.sessions.createIndex({expiresAt:1},{expireAfterSeconds:0})
Explain¶
db.orders.find({userId:123}).explain(‘executionStats’) // COLLSCAN=špatné, IXSCAN=dobré
- ESR: Equality, Sort, Range
- Partial indexy
- Covered queries
- Kontrolujte nepoužívané
Strategie indexování¶
Pravidlo ESR (Equality, Sort, Range) určuje optimální pořadí polí v compound indexu. Nejdříve umístěte pole pro equality match, pak sort pole a nakonec range podmínky. Tím minimalizujete počet zkoumaných klíčů v indexu.
Partial indexy vytvářejte pro kolekce, kde dotazujete jen subset dokumentů — například {status: "active"}. Tím ušetříte místo a zrychlíte zápisy. Covered queries (dotazy, jejichž výsledek je celý obsažen v indexu) eliminují potřebu číst dokumenty z disku. Pravidelně kontrolujte nepoužívané indexy pomocí $indexStats, protože každý index zpomaluje zápisy a zabírá místo na disku.
Indexy = výkon¶
Bez indexů = collection scan. Vždy explain().