MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB + Python - consulta simples muito lenta


Tem certeza de que seu índice foi criado? você poderia fornecer a saída de getIndexes() da sua coleção

por exemplo:db.my_collection.getIndexes()

e a explicação da sua consulta
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()

PS:claro que devo concordar com @Aesthete sobre o fato de você armazenar muito mais do que precisa...

Atualização de 29/01/2014

Perfeito! Como você vê, você tem quatro índices diferentes quando pode criar UM índice composto que incluirá todos eles.

definindo

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

fornecerá um índice mais preciso que permitirá que você consulte:
  • year
  • year e month
  • year e month e day
  • year e month e day e hour

Isso tornará suas consultas (com as quatro chaves) muito mais rápidas, pois todos os seus critérios serão atendidos nos dados do índice!

observe que a ordem das chaves em ensureIndex() é crucial, essa ordem realmente define a lista de consultas acima mencionada!

Observe também que se tudo o que você precisa são esses 4 campos, então se você especificar uma projeção correta
ex:
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 })

então será usado apenas o índice, que é o desempenho máximo!