Pregunta

Tengo este SQL:

SELECT
  *
FROM
  Requisicao r
  join convenio c on c.idconvenio = r.idconvenio
  join empresa e on e.idempresa = c.idempresa

Cuando lo ejecuto obtengo este plan de ejecución:

PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318))

Qué significa que no se utilizó el índice de Convenio (cada tabla tiene sus índices)

Me gustaría entenderlo un poco mejor para poder mejorar algunos problemas de rendimiento que tengo con este sistema.

Gracias.

¿Fue útil?

Solución

¿Qué te parece mal? Debido a que no tiene ninguna condición (cláusula WHERE), el servidor leerá una tabla de forma natural, es decir, desde la primera fila hasta la última. Teniendo en cuenta la selectividad del índice servido, decidió que sería mejor leer de c y unir registros de e y r.

Otros consejos

Estoy de acuerdo con Andrei. Si convenio.idconvenio tiene baja selectividad, el plan está bien.

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