sql >> Base de Datos >  >> RDS >> Oracle

Cómo se calcula el factor de agrupamiento de Oracle Index

Índice

  • ¿Qué es el factor de agrupación de índices de Oracle (CF)?
  • ¿Cómo se calcula el CF?
  • cómo mejorar el factor de agrupación en Oracle
  • Consulta para determinar el factor de agrupación 
  • ¿Cómo afecta el factor de agrupamiento de índices de Oracle al plan del optimizador?

¿Qué es el factor de agrupamiento de índices de Oracle (CF)?

El factor de agrupación es un número que representa el grado en que los datos se distribuyen aleatoriamente en una tabla en comparación con la columna indexada. En términos simples, es el número de "cambios de bloque" al leer una tabla usando un índice.

Es una estadística importante que juega un papel importante en el cálculo del optimizador. Se utiliza para ponderar el cálculo de las exploraciones de rango de índice. Cuando el factor de agrupamiento es más alto, el costo del análisis de rango de índice es más alto

Un buen factor de agrupamiento es igual (o cercano) a los valores del número de bloques de la tabla.

Un factor de agrupamiento incorrecto es igual (o cercano) al número de filas de la tabla.

¿Cómo se calcula el CF?

Oracle calcula el factor de agrupamiento haciendo un escaneo completo del índice recorriendo los bloques de hojas de un extremo a otro. Para cada entrada en cada hoja, Oracle verifica el número de archivo absoluto y la identificación del bloque, según se obtiene del ROWID del valor indexado. Mantiene una cuenta corriente de cuántos bloques "diferentes" contienen filas de datos a las que apunta el índice. La dirección de bloque de la primera entrada se compara con la dirección de bloque de la segunda entrada. Si es el mismo bloque de tabla, Oracle no incrementa el contador. Si los bloques de la tabla son diferentes, Oracle agrega uno al conteo. Este proceso de conteo continúa de entrada en entrada siempre comparando la entrada anterior con la actual.

El anterior es un buen ejemplo de CF, ya que CF es igual al número de bloques

Ejemplo de factor de agrupamiento incorrecto

Aquí el factor de agrupación es igual al número de filas

Este método de contar tiene su propio resultado inesperado. Supongamos que los datos se rellenan en un pequeño conjunto de bloques, pero no en orden en referencia a la clave de índice, entonces podría parecer que un conjunto de filas está sobre un gran conjunto de bloques cuando tal vez solo haya unos pocos bloques realmente distintos. . Por lo tanto, CF sería más alto, pero de hecho, está tocando muy pocos bloques. Este problema se puede mitigar en 12c usando las preferencias de la tabla y especificando el bloque almacenado en caché en la tabla.

cómo mejorar el factor de agrupación en Oracle

Una reconstrucción de índice no tendría ningún efecto en el factor de agrupación. La tabla debe ordenarse y reconstruirse para reducir el factor de agrupación.

Consulta para determinar el factor de agrupación 

CF se almacena en el diccionario de datos y se puede ver desde dba_indexes (o user_indexes).

De hecho, todas las estadísticas del índice se pueden encontrar allí

SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;

¿Cómo afecta el factor de agrupamiento de índices de Oracle al plan del optimizador?

El factor de agrupación es la estadística principal que utiliza el optimizador para ponderar las rutas de acceso al índice. Es una estimación de la cantidad de LIO para los bloques de la tabla necesarios para adquirir todas las filas que satisfacen la consulta en orden. Cuanto mayor sea el factor de agrupación, más LIO estimará el optimizador que se requerirán. Cuantos más LIO se requieran, menos atractivo y, por lo tanto, más costoso será el uso del índice.

Artículo relacionado
Índice de partición de Oracle:comprensión del índice de partición de Oracle, ¿Qué son los índices globales no particionados?, ¿Qué son los índices locales con prefijo, el índice local sin prefijo
Encuentre índices en una tabla en Oracle:consulte este artículo para encontrar consultas sobre cómo para encontrar índices en una tabla en Oracle, enumere todos los índices en el esquema, estado del índice, columna de índice
tipos de índices en Oracle:esta página consta de información de índices de Oracle, diferentes tipos de índices en Oracle con un ejemplo, cómo para crear/eliminar/alterar el índice en Oracle
Índice virtual en Oracle:¿Qué es el índice virtual en Oracle? Usos, limitaciones, ventajas y cómo utilizar para comprobar el plan de explicación en la base de datos de Oracle, parámetro oculto _USE_NOSEGMENT_INDEXES