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

Índices compuestos óptimos para $exists:verdadero (índices dispersos)

Lo que no parece estar entendiendo aquí es que $exists no puede "agarrar" un índice de ninguna manera, incluso cuando es escaso. Como dice la documentación en sí:

El ejemplo dado en esas páginas es un { "$exists": false } consulta. Pero la condición lógica inversa no hace ninguna diferencia aquí.

Para obtener el "beneficio total" de un índice "escaso", debe considerar el "tipo" de datos que contiene y consultar de manera adecuada.

Para numérico, algo como:

db.collection.find({ "a": "foobar", "b": { "$gte": -9999, "$lte": 9999 } })

Que usa un índice, y el disperso. O para texto basado:

db.collection.find({ "a": "foobar", "b": /.+/ })

Que también usará el índice disperso y solo verá aquellos en los que se definió "b".

Para "matrices", entonces "tenga cuidado". Como el valor que se busca es probablemente uno de los anteriores, a menos que haya hecho esto:

db.collection.insert({ "a": 1, "b": [[]] })

Donde entonces esto está bien:

db.ab.find({ "a": 1, "b": { "$type": 4 } })

Pero tampoco va a usar el índice "disperso" por las mismas razones $exists no funcionará aquí.

Por lo tanto, debe comprender qué significan los términos aquí y "consultar adecuadamente" para poder utilizar las definiciones de índice que crea si espera obtener el máximo rendimiento.

Estos son ejemplos claros que puedes probar por ti mismo y ver que los resultados son ciertos. Desearía que la documentación central fuera más clara en estos puntos, pero también sé que muchos han intentado contribuir (y han producido excelentes explicaciones), pero ninguno de ellos se ha incluido hasta la fecha.

Supongo que es por eso que estás preguntando aquí.