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

índices mongodb que cubren los valores faltantes

Hay dos características relevantes de un índice que permiten búsquedas rápidas (en comparación con realizar un escaneo de colección):

  • Ordenación de valores
  • Compacidad de los valores indexados

Si tiene valores a y b , puedes decir que a viene antes de b , lexicográficamente. Si tiene documentos {a: 2, b: 5} y {b: 4, a: 3} , no existe un orden único de estos documentos que satisfaga las consultas típicas. Por ejemplo, si desea que todos los a valores ordenados entonces podría esperar 2, 3 , pero si quieres el b valores que podría esperar 4, 5 - solicitar que se invierta el orden de los documentos.

Cuando una base de datos almacena el índice en el disco, los valores se almacenan en orden de índice (sea lo que sea para el índice en particular, por ejemplo, la intercalación afecta esto). Por lo general, no existe un orden único que se pueda utilizar para los documentos de cobro en general, por lo que los documentos de cobro no están ordenados.

Cuando consulta por índice, toma el valor que se busca y esencialmente ejecuta una búsqueda binaria usando el índice porque los datos en el índice están ordenados.

La segunda razón para usar el índice es que, si está escaneando la colección, para cada documento, normalmente se debe recuperar el documento completo del disco y omitirlo. Si tiene una colección de 100 GB y está realizando un escaneo, es posible que deba omitir más de 100 GB de datos. Si la misma colección tiene un índice de 100 MB en algún campo (porque el índice solo almacena los valores en ese campo y no los datos de todo el documento), y la base de datos realiza un escaneo de índice completo, solo tiene que recorrer 100 MB de datos.

Ahora, a su pregunta sobre el almacenamiento de falta de valores en un índice.

Desde el punto de vista del índice, la "falta de un valor" en diferentes documentos es el mismo valor. Pierde la capacidad de realizar búsquedas binarias cuando todos sus valores son idénticos. Entonces, si está buscando ese documento de "falta de valor", el índice le devolverá todos los documentos de la colección que carecen de valor, y luego tendrá que escanearlos de todos modos para filtrar por cualquier otra condición que desee. tener. Dado que esto generalmente produce una mala selectividad, las bases de datos no se preocupan por los índices y, en primer lugar, realizan escaneos de colecciones.

Y, lo más probable es que desee algunos otros campos fuera de su consulta, no el campo que no tiene un valor. Así que ahora quiere que el índice almacene documentos completos, anulando la idea de compacidad.