¿Cómo afectan los índices el rendimiento de las consultas?


12

Obviamente, mantener varios índices diferentes tiene un impacto negativo en el rendimiento de inserción y eliminación. ¿Qué pasa con el rendimiento de la consulta: tiene sentido mantener demasiados índices en una tabla? ¿Mejorará el rendimiento de la consulta en cualquier caso con un índice agregado (por supuesto, para consultas que utilizan el índice) o incluso es posible que el rendimiento de la consulta se degrade con demasiados índices porque es necesario consultar todos los índices para obtener el ¿resultado?

En caso de que haya diferentes índices en una tabla: ¿se considerarán todos, o solo los mejores desde el punto de vista del optimizador? ¿Oracle implementa índices multidimensionales?


2
¿Por qué no pruebas esto e informas de tus resultados? :)
Neil McGuigan el

Lo haré mañana :)
Paweloque

2
Los índices no necesariamente ralentizan las eliminaciones, también pueden acelerarlas (al igual que las actualizaciones pueden aprovechar un índice)
a_horse_with_no_name

@el jefe, ¿qué sentido tiene reinventar la rueda? así que sí, el efecto de rendimiento de la consulta está en duda, aunque sabemos con certeza que las inserciones / eliminaciones se verían afectadas. ¿Qué hay de las actualizaciones? ¿serán afectados negativamente?
Sangram

Respuestas:


15

Generar el plan llevará un poco más de tiempo cuando haya más índices a considerar, pero dudo que la diferencia sea significativamente significativa. Los motivos para descartar un índice no enumeran el rendimiento de la consulta. Por otro lado, en general, no debe crear índices a menos que sepa que se utilizarán para hacer una consulta más eficiente.

De la Guía de conceptos de Oracle , estos son los criterios para crear un índice.

En general, considere crear un índice en una columna en cualquiera de las siguientes situaciones:

  • Las columnas indexadas se consultan con frecuencia y devuelven un pequeño porcentaje del número total de filas en la tabla.

  • Existe una restricción de integridad referencial en la columna o columnas indexadas. El índice es un medio para evitar un bloqueo completo de la tabla que de otro modo sería necesario si actualiza la clave primaria de la tabla primaria, se fusiona con la tabla primaria o se elimina de la tabla primaria.

  • Se colocará una restricción de clave única en la tabla y desea especificar manualmente el índice y todas las opciones de índice.

Todos los índices se considerarán en el sentido de que todos los índices en las tablas de la consulta se examinan para determinar si se pueden usar. Los que podrían ser se examinan más a fondo para determinar la utilidad.


7

Mientras sus estadísticas estén actualizadas, el optimizador basado en costos debe tomar decisiones sensatas sobre qué índices usar. Si no es así, es el momento de utilizar pistas . Nunca consultará un índice en una columna que no sea necesaria para satisfacer la consulta.


0

Encontré esto en Seleccionar una estrategia de índice de la Guía del desarrollador de aplicaciones . Esa página trata sobre 'seleccionar una estrategia de índice':

Limite el número de índices para cada tabla

Cuantos más índices, se incurre en más gastos generales a medida que se modifica la tabla. Cuando se insertan o eliminan filas, todos los índices de la tabla deben actualizarse. Cuando se actualiza una columna, todos los índices de la columna deben actualizarse.

Debe sopesar el beneficio de rendimiento de los índices para consultas frente a la sobrecarga de rendimiento de las actualizaciones. Por ejemplo, si una tabla es principalmente de solo lectura, puede usar más índices; pero, si una tabla está muy actualizada, podría usar menos índices.


2
A partir de la pregunta: "Es evidente que mantener varios índices diferentes tienen un impacto negativo en el rendimiento de eliminación de inserción y ¿Qué hay de consulta de rendimiento"
Jack dice intento topanswers.xyz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.