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

¿Cuál es la forma correcta de indexar en MongoDB cuando existe una gran combinación de campos?

Generalmente, los índices solo son útiles si están sobre un selectivo campo. Esto significa que la cantidad de documentos que tienen un valor particular es pequeña en relación con el número total de documentos.

Lo que significa "pequeño" varía según el conjunto de datos y la consulta. Una selectividad del 1 % es bastante segura a la hora de decidir si un índice tiene sentido. Si existe un valor particular en, digamos, el 10% de los documentos, realizar un escaneo de tabla puede ser más eficiente que usar un índice sobre el campo respectivo.

Con eso en mente, algunos de sus campos serán selectivos y algunos no lo serán. Por ejemplo, sospecho que filtrar por "OK" no será muy selectivo. Puede eliminar los campos no selectivos de las consideraciones de indexación:si alguien quiere todos los pedidos que están "bien" sin otras condiciones, terminará haciendo un escaneo de la tabla. Si alguien quiere órdenes que estén "bien" y tengan otras condiciones, se utilizará cualquier índice aplicable a otras condiciones.

Ahora que le quedan campos selectivos (o al menos algo selectivos), considere qué consultas son populares y selectivas. Por ejemplo, tal vez marca+tipo sería una combinación de este tipo. Puede agregar índices compuestos que coincidan con consultas populares que espera que sean selectivas.

Ahora bien, ¿qué pasa si alguien filtra solo por marca? Esto podría ser selectivo o no dependiendo de los datos. Si ya tiene un índice compuesto en marca+tipo, dejaría que la base de datos determinara si una consulta solo de marca es más eficiente para cumplir a través del índice de marca+tipo o mediante un escaneo de colección.

Continúe de esta manera con otras consultas y campos populares.