Pregunta

He sea dicha y la leyó en todas partes (pero nadie se atrevió a explicar por qué) que cuando la composición de un índice en varias columnas que debo poner la columna más selectiva en primer lugar, por razones de rendimiento. ¿Porqué es eso? ¿Es un mito?

¿Fue útil?

Solución

  

I debe poner primero la columna más selectivo

de acuerdo con Tom , la selectividad columna no tiene ningún impacto en el rendimiento de las consultas que utilizan todas las columnas en el índice (que afecta la capacidad de Oracle para comprimir el índice).

  

no es lo primero, no es lo más importante. Sin duda, es algo a considerar, pero es relativamente lejos allá abajo en el gran esquema de las cosas.

     

En algunos casos raros, muy peculiares y anormales (como el anterior con los datos realmente completamente sesgada), la selectividad podría fácilmente cuestión Sin embargo, son

     

a) bastante raro   b) realmente depende de los valores usados ??en tiempo de ejecución, como todas las consultas sesgada son

     

lo que en general, vistazo a las preguntas que tenga, tratar de minimizar los índices que necesita en base a eso.

     

El número de valores distintos en una columna en un índice concatenados no es relevante cuando se considera   la posición en el índice.

Sin embargo, estas consideraciones debe venir en segundo lugar al decidir sobre orden de las columnas de índice. Más importante es asegurarse de que el índice puede ser útil para muchas consultas, por lo que el orden de las columnas tiene que reflejar el uso de esas columnas (o su ausencia) en las cláusulas WHERE de las consultas (por la razón ilustrada por AndreKR).

  

La forma de utilizar el índice - que es lo que es relevante a la hora de decidir

.

Todas las demás cosas son iguales, aun así poner en primer lugar la columna más selectiva. Se siente bien ...

Actualización: Otra cita de Tom (gracias a Milán para encontrarlo).

  

En Oracle 5 (sí, la versión 5!), Había un argumento para la colocación de las columnas más selectivas primera   en un índice.

     

Desde entonces, no es cierto que poner las entradas más discriminan por primera vez en el índice   hará que el índice más pequeño o más eficiente. Parece que lo hará, pero no lo hará.

     

Con el índice   compresión llave, hay un argumento convincente para ir a otro lado, ya que puede hacer que el índice   menor. Sin embargo, debe ser impulsada por cómo se utiliza el índice, como se ha indicado anteriormente.

Otros consejos

Se pueden omitir las columnas de derecha a izquierda cuando se utiliza un índice, es decir, cuando se tiene un índice en col_a, col_b se puede usar en WHERE col_a = x pero no se puede utilizar en WHERE col_b = x.

Imagínese tener una agenda de teléfonos que se ordena por los primeros nombres y por los apellidos.

Al menos en Europa y los apellidos de los Estados Unidos tienen una menor selectividad mucho de apellidos, así que mirando hacia arriba el primer nombre no reduciría el conjunto de resultados mucho más, por lo que todavía habría muchas páginas para comprobar la correcta apellido.

El orden de las columnas en el índice debe ser determinado por sus consultas y no ser cualquier consideración de selectividad. Si usted tiene un índice en (a, b, c), y la mayoría de las consultas de una sola columna está en contra de la columna C, seguido por una, a continuación, ponerlos en el orden de c, a, b en la definición de índice para la mejor eficiencia . Oracle prefiere utilizar el borde de ataque del índice para la consulta, pero puede utilizar otras columnas en el índice en un camino de acceso menos eficiente conocido como salto-scan.

El más selectivo es el índice, el más rápido es la investigación.

Simplemente imagine un directorio telefónico: se puede encontrar a alguien en su mayoría rápido por apellido. Pero si usted tiene una gran cantidad de personas con el mismo apellido, que va a durar más tiempo en la búsqueda de la persona mirando el apellido cada vez.

Así que hay que dar a las columnas más selectivas en primer lugar para evitar en la medida de lo posible este problema.

Además, debe entonces asegurarse de que sus consultas se utilizan correctamente estos "criterios de selectividad".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top