Optimizar un pipeline

Una agregación que lee menos documentos y toca menos rangos responde antes.

Haz que una agregación lea menos documentos y toque menos rangos. El router ya manda a cada rango la parte del pipeline que puede hacer solo; tú decides cuánto filtra esa parte.

Requisitos

  • Una conexión con un usuario que tenga read sobre la base.

Filtra lo antes posible

Pon $match y $project al principio, sobre campos con índice. Esas etapas se ejecutan en cada rango antes de juntar resultados.

Ordena con límite

Un $sort seguido de $limit se convierte en un top-k por rango, que lee mucho menos que ordenar todo.

Mira el plan

JavaScript
db.pedidos.explain("executionStats").aggregate([{ $match: { estado: "pagado" } }, { $group: { _id: "$cliente" } }]);

Comprobar

explain muestra los rangos tocados y cuántos documentos leyó cada etapa; los números bajan al filtrar antes.

Problemas frecuentes

  • Un $match después de $group no puede usar índices ni ir a cada rango; muévelo antes si filtra campos de los documentos.

Ver también