Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Índice compuesto con más de 3 atributos
Descripción general de
Un índice compuesto o compuesto mantiene las referencias a varios campos dentro de una única estructura de índice. Estos índices optimizan el rendimiento de las consultas que filtran varios campos simultáneamente o combinan el filtrado con las operaciones de clasificación. También son eficaces para las consultas de una sola condición en los campos indexados situados más a la izquierda. La base de datos aprovecha estas entradas del índice para localizar de forma eficiente los documentos coincidentes sin necesidad de digitalizar toda la colección.
Amazon DocumentDB puede usar índices compuestos para admitir consultas que incluyan cualquier subconjunto principal de los campos indexados, un concepto conocido como prefijos de índice. Por ejemplo, si tiene activado un índice compuesto{state: 1, city: 1, zipcode: 1}, Amazon DocumentDB puede procesar eficazmente consultas que utilicen únicamente el campo «estado», los campos «estado» y «ciudad» juntos o los tres campos «estado», «ciudad» y «código postal». Sin embargo, las consultas deben utilizar los campos de izquierda a derecha sin omitir ningún campo intermedio. Esto significa que las consultas que utilizan únicamente los campos «ciudad» o «código postal», o combinaciones como «estado» y «código postal» (omitiendo «ciudad»), no pueden utilizar completamente el índice.
En la mayoría de los escenarios del mundo real, los índices compuestos con tres o menos atributos suelen lograr un rendimiento y una eficiencia de recursos óptimos. Si bien es posible tener más de 3 atributos en el índice compuesto, a menudo se traduce en un mayor consumo de recursos, lo que compensa los beneficios.
Impacto en el clúster
Si bien resulta tentador crear un índice que abarque todas las condiciones de una consulta para lograr el máximo rendimiento teórico, la mayor parte del filtrado de datos se realiza a través de los primeros 1 a 3 atributos de un índice compuesto. Los campos adicionales que superen este umbral contribuyen principalmente al tamaño del índice más que a una optimización significativa de las consultas.
Almacenamiento y I/O gastos generales: los índices compuestos con muchos atributos consumen mucho más espacio de almacenamiento que las alternativas más sencillas. El tamaño es directamente proporcional al número de atributos indexados y al tamaño de los propios valores indexados.
Consumo de memoria: el gran espacio de almacenamiento de los índices compuestos con muchos atributos crea un espacio correspondiente en la memoria, lo que hace que el conjunto de trabajo sea más grande y desplaza otros datos a los que se accede con frecuencia del conjunto de búferes.
Operaciones de escritura: cada modificación de un documento que afecte a varios campos indexados requiere actualizar toda la entrada del índice compuesto, lo que multiplica el trabajo necesario para completar la operación de escritura.
¿Cómo identificarlo
Comience por revisar todos los índices de su colección para identificar los índices compuestos con más de tres atributos:
// List all indexes for the collection db.collection.getIndexes() // Look for indexes with 3+ fields like: // { "userId": 1, "status": 1, "category": 1, "priority": 1, "region": 1 } // { "orderId": 1, "customerId": 1, "productId": 1, "timestamp": 1, "warehouse": 1 }
Corrección
Si se utiliza un índice compuesto con más de tres atributos, identifique las consultas que lo utilizan y busque oportunidades de optimización. Considere la posibilidad de reemplazar estos índices por otros más eficientes que contengan tres o menos atributos. Tras implementar los nuevos índices, elimine los índices antiguos que contienen más de tres atributos.
nota
Coordínese siempre con las partes interesadas y valide el impacto en el rendimiento antes de eliminar cualquier índice.
Siga la regla de igualdad, orden y rango (ESR) al crear índices compuestos.
Regla de rango de clasificación por igualdad (ESR): este orden maximiza la eficiencia del índice al filtrar primero el conjunto de datos con condiciones de igualdad, luego aplicar operaciones de clasificación en el conjunto reducido y, por último, realizar escaneos de rango en el subconjunto más pequeño posible
-
ordenar los campos como Igualdad (coincidencias exactas),
-
Ordenar (ordenar),
-
Rango (>, <, $in).
// Query pattern db.orders.find({ userId: "user123", // Equality price: { $gte: 50, $lte: 200 } // Range }).sort({ createdAt: -1 }) // Sort // Optimal index following ESR rule db.orders.createIndex({ userId: 1, createdAt: -1, price: 1 }) // Equality Sort Range