Por que los índices
Comprende dos puntos clave.
- Si bien un índice es mejor que ningún índice, el índice correcto es mucho mejor que cualquiera de los dos.
- MongoDB solo usará un índice por consulta, creando índices compuestos con el orden de campo adecuado para lo que probablemente desee usar.
Los índices no son gratuitos. Toman memoria e imponen una penalización de rendimiento al realizar inserciones, actualizaciones y eliminaciones. Normalmente, el impacto en el rendimiento es insignificante (especialmente en comparación con las ganancias en el rendimiento de lectura), pero eso no significa que no podamos ser inteligentes al crear nuestros índices.
Cómo los índices
Identificar qué grupo de campos deben indexarse juntos se trata de comprender las consultas que está ejecutando. El orden de los campos utilizados para crear su índice es fundamental. La buena noticia es que, si obtiene un orden incorrecto, el índice no se usará en absoluto, por lo que será fácil de detectar con una explicación.
Por qué ordenar
Es posible que sus consultas deban ordenar. Pero ordenar puede ser una operación costosa, por lo que es importante tratar los campos en los que está ordenando como si fueran un campo que está consultando. Entonces será más rápido si tiene index. Sin embargo, hay una diferencia importante, el campo que está ordenando debe ser el último campo en su índice. La única excepción a esta regla es que si el campo también forma parte de su consulta, la regla debe ser la última no se aplica.
Cómo ordenar
Puede especificar un orden en todas las claves del índice o en un subconjunto; sin embargo, las claves de clasificación deben aparecer en el mismo orden en que aparecen en el índice. Por ejemplo, un patrón de clave de índice {a: 1, b: 1} puede admitir una ordenación en {a: 1, b: 1} pero no en {b: 1, a: 1}.
La clasificación debe especificar la misma dirección de clasificación (es decir, ascendente / descendente) para todas sus claves como patrón de clave de índice o especificar la dirección de clasificación inversa para todas sus claves como patrón de clave de índice. Por ejemplo, un patrón de clave de índice {a: 1, b: 1} puede admitir una ordenación en {a: 1, b: 1} y {a: -1, b: -1} pero no en {a: -1 , b: 1}.
Supongamos que existen estos índices:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?