Comprender el plan de ejecución de una consulta
-
22-07-2019 - |
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.
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