jueves, 3 de julio de 2008

Uso de índices

He aquí la pregunta que muchos se hacen cuando se encuentran con problemas de rendimiento en sus tablas.... ¿he de crear un índice?. Veamos en que criterios podemos basarnos.

Como norma general, para cualquier tipo de índice, debe limitarse el número de estos y crear siempre los que exclusivamente sean necesarios, es decir, el menor número posible dentro de todos los que hagan falta.

La selectividad de un índice es la relación entre el número de valores distintos de una columna indexada y el número de registros de la tabla. Si una tabla tiene 1000 registros, y una columna indexada de la tabla tiene 950 valores diferentes, la selectividad del índice es 0.95 (950/1000). La mejor selectividad es 1. Los índices únicos sobre columnas no nulas y las claves primarias siempre tienen selectividad 1.

La selectividad de un índice nos da una medida de su utilidad para evitar I/O en la ejecución de sentencias contra la tabla. Si un índice sobre una tabla de 1000 registros tiene sólo 5 valores diferentes, entonces su selectividad es muy pobre (5/1000 = 0.005). Para cada posible valor de este índice, habrá un promedio teórico de 200 filas. En este caso, podría ser más interesante realizar un full table scan en vez de acceder vía índice a esta tabla, si bien se debe comprobar con datos reales de acceso a la misma.

Si se está usando CBO, el optimizador no realizará accesos a tablas a través de índices con una selectividad muy baja.

Puede sin embargo ser conveniente usar índices con baja selectividad, si se cumplen varias condiciones.

• Las sentencias empleadas no usan variables bind o se ha implementado algún mecanismo para distinguir aquellas consultas que deben emplear el índice, como por ejemplo, uso de literales, basándose en la distribución de datos.
• El índice está analizado con histogramas.
• El valor usado en las condiciones tiene muy poca cardinalidad.

Un saludo para todos.

No hay comentarios:

Powered By Blogger

Datos personales