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

¿Por qué es importante la dirección del índice en MongoDB?

MongoDB concatena la clave compuesta de alguna manera y la usa como clave en un BTree.

Al buscar elementos individuales - El orden de los nodos en el árbol es irrelevante.

Si está devolviendo un rango de nodos - Los elementos próximos entre sí estarán bajando por las mismas ramas del árbol. Cuanto más cerca estén los nodos del rango, más rápido se podrán recuperar.

Con un solo índice de campo - El orden no importará. Si están juntos en orden ascendente, también lo estarán en orden descendente.

Cuando tienes una clave compuesta - El orden empieza a importar.

Por ejemplo, si la clave es A ascendente B ascendente, el índice podría verse así:

Row   A B
1     1 1
2     2 6
3     2 7 
4     3 4
5     3 5
6     3 6
7     5 1

Una consulta para A ascendente B descendente deberá saltar alrededor del índice fuera de orden para devolver las filas y será más lenta. Por ejemplo, devolverá Fila 1, 3, 2, 6, 5, 4, 7

Una consulta a distancia en el mismo orden que el índice simplemente devolverá las filas secuencialmente en el orden correcto.

Encontrar un registro en un BTree toma O(Log(n)) tiempo. Encontrar un rango de registros en orden es solo OLog(n) + k donde k es el número de registros a devolver.

Si los registros están desordenados, el costo podría ser tan alto como OLog(n) * k