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

tiempo de búsqueda con índice> sin índice

En este caso, el índice no ayuda porque su conjunto de resultados coincidentes consiste en casi toda la colección. Eso significa que tiene que cargar en la RAM y recorrer la mayor parte del índice, así como cargar en la RAM y recorrer los propios documentos.

Sin el índice, solo haría un escaneo de la tabla, inspeccionaría cada documento y devolvería si coinciden.

En casos como este, donde una consulta va a devolver casi una colección completa, un índice puede no ser útil.

Agregar un .limit() acelerará la consulta. También puede obligar al optimizador de consultas a no usar el índice con .hint():

db.collection.find().hint({$natural:1})

También puede forzar la consulta para que proporcione los valores de los resultados directamente desde el propio índice limitando los campos seleccionados a solo los que ha indexado. Esto le permite evitar la necesidad de cargar cualquier documento después de realizar el escaneo de índice.

Pruebe esto y vea si la salida de explicación indica "indexOnly":true

db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()

Detalles aquí:

http://www.mongodb.org /display/DOCS/Recuperando+un+subconjunto+de+campos#Recuperandounsubconjuntodecampos-índices cubiertos