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
/ /
Strategies

Cree índices para garantizar la selectividad de las consultas

La selectividad es la capacidad de una query para restringir los resultados utilizando índices. Las querys eficaces son más selectivas y permiten a MongoDB utilizar índices para una mayor parte del trabajo asociado con la realización de la query.

Para garantizar la selectividad, redacte queries que limiten la cantidad de documentos posibles con el o los campos indexados. Guardar queries que sean apropiadamente selectivas en relación con tus datos indexados.

Considera una colección de documentos que tiene la siguiente forma:

{
status: "processed",
product_type: "electronics"
}

En este ejemplo, el status de 99% de los documentos en la colección es processed. Si añades un índice en status y consultas documentos con el status de processed, el índice tendrá baja selectividad con esta consulta. Sin embargo, si deseas realizar queries de documentos que no tengan el status de processed, este índice tiene una alta selectividad porque la query solo lee el 1% del índice.

Considera una colección de documentos donde el campo status tiene tres valores distribuidos en toda la colección:

[
{ _id: ObjectId(), status: "processed", product_type: "electronics" },
{ _id: ObjectId(), status: "processed", product_type: "grocery" },
{ _id: ObjectId(), status: "processed", product_type: "household" },
{ _id: ObjectId(), status: "pending", product_type: "electronics" },
{ _id: ObjectId(), status: "pending", product_type: "grocery" },
{ _id: ObjectId(), status: "pending", product_type: "household" },
{ _id: ObjectId(), status: "new", product_type: "electronics" },
{ _id: ObjectId(), status: "new", product_type: "grocery" },
{ _id: ObjectId(), status: "new", product_type: "household" }
]

Si agrega un índice en status y consulta { "status": "pending", "product_type": "electronics" }, MongoDB debe leer tres claves de índice para devolver el resultado coincidente. De forma similar, una consulta para { "status": { $in: ["processed", "pending"] }, "product_type" : "electronics" } debe leer seis documentos para devolver los dos documentos coincidentes.

Considera el mismo índice en una colección donde status tiene nueve valores distribuidos por la colección:

[
{ _id: ObjectId(), status: 1, product_type: "electronics" },
{ _id: ObjectId(), status: 2, product_type: "grocery" },
{ _id: ObjectId(), status: 3, product_type: "household"},
{ _id: ObjectId(), status: 4, product_type: "electronics" },
{ _id: ObjectId(), status: 5, product_type: "grocery"},
{ _id: ObjectId(), status: 6, product_type: "household"},
{ _id: ObjectId(), status: 7, product_type: "electronics" },
{ _id: ObjectId(), status: 8, product_type: "grocery" },
{ _id: ObjectId(), status: 9, product_type: "household" }
]

Si haces una query de { "status": 2, "product_type": "grocery" }, MongoDB solo lee un documento para completar la query. El índice y la query son más selectivos porque solo hay un documento coincidente y la query puede seleccionar ese documento específico usando el índice.

Aunque la consulta de este ejemplo sobre la igualdad status es más selectiva, una consulta como { "status": { $gt: 5 }, "product_type": "grocery" } aún necesitaría leer cuatro documentos. Sin embargo, si se crea un índice compuesto sobre product_type y status, una consulta sobre { "status": { $gt: 5 }, "product_type": "grocery" } solo necesitaría leer dos documentos.

Para mejorar la selectividad, puedes crear un índice compuesto que restringe los documentos que las consultas leen. Por ejemplo, si deseas mejorar la selectividad para consultas sobre status y product_type, podrías crear un índice compuesto en esos dos campos.

Si MongoDB lee una gran cantidad de documentos para obtener resultados, algunas consultas podrían funcionar más rápido sin índices. Para determinar el rendimiento, consulte Medir el uso de índices.

Volver

Ordene los resultados del query

En esta página