Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Optimización de consultas

Optimizar el rendimiento del query

Para las consultas de uso frecuente, crea Í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 un posts colección que contiene entradas de blog, y si emites regularmente una query que ordena por el campo author_name, entonces puedes optimizar la query 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 por un campo determinado.

Ejemplo

Si ejecutas regularmente una query que ordena por el campo timestamp, puedes optimizar la query creando un índice en el campo timestamp:

Crear este índice:

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

Optimiza esta query:

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 necesitas un subconjunto de campos de documentos, puedes lograr un mejor rendimiento devolviendo solo los campos que necesitas:

Por ejemplo, si en su query a la posts colección, solo necesita los campos timestamp, title, author, y abstract, debe 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 del query selecciona el índice óptimo para una operación específica; sin embargo, puedes forzar a MongoDB a utilizar un índice específico usando el método hint(). Utiliza hint() para apoyar las pruebas de rendimiento o en algunas consultas donde debas seleccionar un campo o un campo que esté incluido 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