2009-08-31 9 views
8

Me interesa saber si hay un beneficio de rendimiento en la partición de una columna numérica que suele ser el objetivo de una consulta. Actualmente tengo una vista materializada que contiene ~ 50 millones de registros. Cuando uso un índice b-tree regular y busco esta columna numérica, obtengo un costo de 7 y resultados de consulta en aproximadamente 0.8 segundos (con caché no cebada). Después de agregar una partición hash global (con 64 particiones) para esa columna, obtengo un costo de 6 y los resultados de la consulta en aproximadamente 0.2 segundos (de nuevo con el caché no preparado).¿Es mejor un índice dividido globalmente (más rápido) que un índice no particionado?

Mi primera reacción es que el índice particionado ha mejorado el rendimiento de mi consulta. Sin embargo, me doy cuenta de que esto puede ser solo una coincidencia y podría depender totalmente de los valores que se buscan, o de otros que no conozco. Entonces mi pregunta es: ¿hay un beneficio en el rendimiento al agregar una partición hash global a una columna numérica en una tabla grande o es el costo de determinar qué particiones de índice escanear? Pesado por el costo de simplemente hacer un escaneo de rango completo en una partición no indexada?

Estoy seguro de que esto, al igual que muchas preguntas de Oracle, se puede responder con un "depende". :) Estoy interesado en aprender qué factores debería considerar para determinar los beneficios de cada enfoque.

Gracias!

Respuesta

4

Estoy bastante seguro de que ha encontrado esta referencia en su investigación - Partitioned Tables and Indexes. Sin embargo, le doy un enlace si alguien está interesado, este es un material muy bueno sobre la partición.

Directo al índice: el índice particionado solo descompone el índice en partes (16 en su situación) y distribuye los datos según su clave de partición hash. Cuando quiere usarlo, Oracle "calcula" el hash de la clave y determina en qué sección continuar con la búsqueda.

Sabiendo cómo funciona la búsqueda de índice, en datos realmente grandes, creo que es mejor elegir el índice dividido para disminuir el árbol de índice que recorre (índice normal). Realmente depende de los datos, que están en la tabla (cómo se compone el árbol de índice común) y es hash y salto directo a nodo inferior más rápido que el recorrido de árbol normal desde el nodo de inicio.

Finalmente, debe tener más confianza con los resultados de la prueba. Si una técnica da mejores resultados en sus datos exactos que otras, no se preocupe por implementarla.

Cuestiones relacionadas