sql >> Databáze >  >> NoSQL >> MongoDB

Jaký je správný způsob indexování v MongoDB, když existuje velká kombinace polí

Obecně platí, že indexy jsou užitečné pouze v případě, že jsou nad selektivní pole. To znamená, že počet dokumentů, které mají určitou hodnotu, je malý vzhledem k celkovému počtu dokumentů.

To, co znamená „malý“, se liší podle souboru dat a dotazu. 1% selektivita je docela bezpečná při rozhodování, zda má index smysl. Pokud určitá hodnota existuje například v 10 % dokumentů, může být skenování tabulky efektivnější než použití indexu nad příslušným polem.

S ohledem na to budou některá z vašich polí selektivní a někteří nebudou. Mám například podezření, že filtrování podle „OK“ nebude příliš selektivní. Z úvah o indexování můžete vyloučit neselektivní pole – pokud někdo chce všechny objednávky, které jsou „v pořádku“ bez dalších podmínek, skončí skenováním tabulky. Pokud někdo chce objednávky, které jsou "OK" a mají jiné podmínky, použije se jakýkoli index, který se vztahuje na jiné podmínky.

Nyní, když vám zbývají selektivní (nebo alespoň trochu selektivní) pole, zvažte, jaké dotazy jsou oblíbené a selektivní. Takovou kombinací by možná byla například značka+typ. Můžete přidat složené indexy, které odpovídají oblíbeným dotazům, u kterých očekáváte, že budou selektivní.

Co se stane, když někdo filtruje pouze podle značky? To může být selektivní nebo ne v závislosti na datech. Pokud již máte složený index pro značku+typ, ponechali byste na databázi, aby určila, zda je efektivnější splnit dotaz pouze na značku prostřednictvím indexu značka+typ nebo pomocí skenování kolekce.

Tímto způsobem pokračujte s dalšími oblíbenými dotazy a poli.



  1. Střípky MongoDB a nevyvážené agregační zatížení

  2. Bitva o databáze NoSQL - Porovnání MongoDB a CouchDB

  3. Implementujte funkci automatického dokončování pomocí vyhledávání MongoDB

  4. Mohu serializovat objekt instance Ruby Digest::SHA1?