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

¿Cómo elegir y optimizar los índices de Oracle?

La documentación de Oracle tiene un excelente conjunto de consideraciones para las opciones de indexación:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

Actualización para 19c:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D

Citando:

  • Considere la posibilidad de indexar las claves que se utilizan con frecuencia en las cláusulas WHERE.

  • Considere la posibilidad de indexar claves que se utilizan con frecuencia para unir tablas en sentencias SQL. Para obtener más información sobre la optimización de uniones, consulte la sección "Uso de clústeres hash para el rendimiento".

  • Elija claves de índice que tengan una alta selectividad. La selectividad de un índice es el porcentaje de filas en una tabla que tienen el mismo valor para la clave indexada. La selectividad de un índice es óptima si pocas filas tienen el mismo valor. Nota:Oracle crea índices automáticamente, o usa índices existentes, en las claves y expresiones de claves primarias y únicas que usted define con restricciones de integridad. La indexación de columnas de baja selectividad puede ser útil si la distribución de datos está sesgada, de modo que uno o dos valores ocurren mucho. con menos frecuencia que otros valores.

  • No utilice índices de árbol B estándar en claves o expresiones con pocos valores distintos. Estas claves o expresiones suelen tener poca selectividad y, por lo tanto, no optimizan el rendimiento a menos que los valores clave seleccionados con frecuencia aparezcan con menos frecuencia que los otros valores clave. Puede usar índices de mapa de bits de manera efectiva en tales casos, a menos que el índice se modifique con frecuencia, como en una aplicación OLTP de alta simultaneidad.

  • No indexe columnas que se modifican con frecuencia. Las sentencias UPDATE que modifican las columnas indexadas y las sentencias INSERT y DELETE que modifican las tablas indexadas tardan más que si no hubiera índice. Estas declaraciones SQL deben modificar los datos de los índices, así como los datos de las tablas. También generan deshacer y rehacer adicionales.

  • No indexe claves que aparecen solo en cláusulas WHERE con funciones u operadores. Una cláusula WHERE que usa una función distinta de MIN o MAX, o un operador con una clave indexada, no pone a disposición la ruta de acceso que usa el índice, excepto con índices basados ​​en funciones.

  • Considere indexar claves externas de restricciones de integridad referencial en casos en los que una gran cantidad de instrucciones INSERT, UPDATE y DELETE simultáneas acceden a las tablas principal y secundaria. Tal índice permite ACTUALIZAR y ELIMINAR en la tabla principal sin compartir el bloqueo de la tabla secundaria.

  • Al elegir indexar una clave, considere si la ganancia de rendimiento de las consultas compensa la pérdida de rendimiento de INSERT, UPDATE y DELETE y el uso del espacio necesario para almacenar el índice. Es posible que desee experimentar comparando los tiempos de procesamiento de las sentencias SQL con y sin índices. Puede medir el tiempo de procesamiento con la función de seguimiento de SQL.