MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Qual è il modo corretto di indicizzare in MongoDB quando esiste una grande combinazione di campi

In genere, gli indici sono utili solo se sono su un selettivo campo. Ciò significa che il numero di documenti che hanno un valore particolare è piccolo rispetto al numero complessivo di documenti.

Il significato di "piccolo" varia in base al set di dati e alla query. Una selettività dell'1% è abbastanza sicura quando si decide se un indice ha senso. Se esiste un valore particolare, ad esempio, nel 10% dei documenti, l'esecuzione di una scansione tabella può essere più efficiente rispetto all'utilizzo di un indice sul rispettivo campo.

Con questo in mente, alcuni dei tuoi campi saranno selettivi e alcuni non lo saranno. Ad esempio, sospetto che il filtraggio per "OK" non sarà molto selettivo. Puoi eliminare i campi non selettivi dalle considerazioni sull'indicizzazione:se qualcuno desidera che tutti gli ordini siano "OK" senza altre condizioni, finirà per eseguire una scansione della tabella. Se qualcuno desidera ordini che sono "OK" e hanno altre condizioni, verrà utilizzato qualsiasi indice applicabile ad altre condizioni.

Ora che ti rimangono campi selettivi (o almeno alquanto selettivi), considera quali query sono sia popolari che selettive. Ad esempio, forse marca+tipo sarebbe una tale combinazione. Potresti aggiungere indici composti che corrispondono a query popolari che prevedi siano selettive.

Ora, cosa succede se qualcuno filtra solo per marca? Questo potrebbe essere selettivo o meno a seconda dei dati. Se disponi già di un indice composto su marca+tipo, lasceresti al database il compito di determinare se una query solo marchio è più efficiente da soddisfare tramite l'indice marca+tipo o tramite una scansione della raccolta.

Continua in questo modo con altre query e campi popolari.