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

MongoDB + Python - query semplice molto lenta

Sei sicuro che il tuo indice sia stato creato? potresti fornire l'output di getIndexes() della tua collezione

es:db.my_collection.getIndexes()

e la spiegazione della tua richiesta

db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()

PS:ovviamente devo essere d'accordo con @Aesthete sul fatto che immagazzini molto più del necessario...

Aggiornamento 29/1/2014

Perfetto! Come vedi hai quattro diversi indici quando puoi creare UN indice composto che li includerà tutti.

definizione

db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })

ti fornirà un indice più preciso che ti consentirà di eseguire query per:

  • year
  • year e month
  • year e month e day
  • year e month e day e hour

Ciò renderà le tue query (con le quattro chiavi) molto più veloci, perché tutti i tuoi criteri verranno soddisfatti nei dati dell'indice!

tieni presente che l'ordine delle chiavi in ​​ensureIndex() è fondamentale, quell'ordine definisce effettivamente l'elenco di query sopra menzionato!

Nota anche che se tutto ciò di cui hai bisogno sono questi 4 campi, allora se specifichi una proiezione corretta
eg:
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28}, { created_at_year: 1, created_at_month: 1, created_at_day: 1 })

quindi verrà utilizzato solo l'indice, che è la massima performance!