Docs Menu
Docs Home
/ /
Optimización de consultas

Optimizar el rendimiento del query

Para consultas frecuentes, cree Índices. Si una consulta busca en varios campos, se crea un índice compuesto. Analizar un índice es mucho más rápido que analizar una colección. Las estructuras de los índices son más pequeñas que las referencias de los documentos y almacenan las referencias en orden.

Ejemplo

Si tienes una posts colección que contiene publicaciones de blog, y si emite regularmente una consulta que ordena en el campo author_name, puede optimizar la consulta creando un índice en el campo author_name:

db.posts.createIndex( { author_name : 1 } )

Los índices también mejoran la eficiencia en las consultas que rutinariamente ordenan un campo determinado.

Ejemplo

Si emite periódicamente una consulta que ordena en el campo timestamp, puede optimizar la consulta creando un índice en el campo timestamp:

Creando este índice:

db.posts.createIndex( { timestamp : 1 } )

Optimiza esta consulta:

db.posts.find().sort( { timestamp : -1 } )

Debido a que MongoDB puede leer índices en orden ascendente y descendente, la dirección de un índice de clave única no importa.

Los índices admiten consultas, operaciones de actualización y algunas fases del proceso de agregación.

Las claves de índice que son del tipo BinData se almacenan de manera más eficiente en el índice si:

  • el valor del subtipo binario está en el rango de 0-7 o 128-135, y

  • la longitud del arreglo de bytes es: 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24 o 32.

Los cursores de MongoDB devuelven resultados en grupos de varios documentos. Si conoce el número de resultados deseados, puede reducir la demanda de recursos de red ejecutando el limit() método.

Esto se suele usar junto con las operaciones de ordenación. Por ejemplo, si solo necesita 10 resultados de su consulta a la colección posts, debe ejecutar el siguiente comando:

db.posts.find().sort( { timestamp : -1 } ).limit(10)

Para obtener más información sobre cómo limitar los resultados, consulte limit()

Cuando solo necesita un subconjunto de campos de los documentos, puede lograr un mejor rendimiento al devolver solo los campos que necesita:

Por ejemplo, si en su consulta a la colección posts solo necesita los campos timestamp, title, author y abstract, deberá emitir el siguiente comando:

db.posts.find( {}, { timestamp : 1 , title : 1 , author : 1 , abstract : 1} ).sort( { timestamp : -1 } )

Para aprender más sobre el uso de las proyecciones, consultar Campos de proyecto a devolver del query.

En la mayoría de los casos, el optimizador de consultas selecciona el índice óptimo para una operación específica; sin embargo, puede forzar a MongoDB a usar un índice específico mediante el hint() método. Use hint() para facilitar las pruebas de rendimiento o en algunas consultas donde deba seleccionar un campo o campos incluidos en varios índices.

Usa el operador $inc de MongoDB para incrementar o disminuir valores en documentos. El operador incrementa el valor del campo en el lado del servidor, como alternativa a seleccionar un documento, realizar sencillas modificaciones en el cliente y luego guardar el documento completo en el servidor. El operador $inc también puede ayudar a evitar condiciones de competencia, que se producirían cuando dos instancias de una aplicación consultan un documento, incrementan manualmente un campo y guardan el documento entero de nuevo al mismo tiempo.

Volver

Salida

En esta página