sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB + Python - consulta simple muy lenta

¿Estás seguro de que se ha creado tu índice? podría proporcionar la salida de getIndexes() de tu colección

por ejemplo:db.my_collection.getIndexes()

y la explicación de su consulta

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

PD:por supuesto, debo estar de acuerdo con @Aesthete sobre el hecho de que almacenas mucho más de lo que necesitas...

Actualización del 29/1/2014

¡Perfecto! Como puede ver, tiene cuatro índices diferentes cuando puede crear UN índice compuesto que los incluirá a todos.

definiendo

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

le proporcionará un índice más preciso que le permitirá consultar:

  • year
  • year y month
  • year y month y day
  • year y month y day y hour

¡Esto hará que sus consultas (con las cuatro teclas) sean mucho más rápidas, porque todos sus criterios se cumplirán en los datos del índice!

tenga en cuenta que el orden de las claves en ensureIndex() es crucial, ¡ese orden en realidad define la lista de consultas mencionada anteriormente!

También tenga en cuenta que si todo lo que necesita son estos 4 campos, si especifica una proyección correcta
por ejemplo:
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 })

entonces solo se usará el índice, ¡que es el máximo rendimiento!