Describe los algoritmos reales que el servidor utiliza para recuperar sus datos.
Una consulta SQL
así:
SELECT *
FROM mytable1
JOIN mytable2
ON …
GROUP BY
…
ORDER BY
…
, describe lo que se debe hacer, pero no cómo que se debe hacer.
El plan de ejecución muestra cómo: los que se utilizan índices, que se unen a los métodos son elegidos (bucles anidados o combinación hash o combinación de mezcla), cómo los resultados se agrupan (usando clasificación o hash), la forma en que se ordenan etc. .
Desafortunadamente, incluso modernas SQL
motores no puede encontrar automáticamente los planes óptimos para las consultas más o menos complejos, todavía toma un desarrollador SQL
reformular las consultas para que sean performant (incluso hacen lo que hace la consulta original).
Un ejemplo clásico sería también estas consultas:
SELECT (
SELECT COUNT(*)
FROM mytable mi
WHERE mi.id <= mo.id
)
FROM mytable mo
ORDER BY
id
y
SELECT RANK() OVER (ORDER BY id)
FROM mytable
, que hacen lo mismo y en teoría deberían ser ejecutados utilizando los mismos algoritmos.
Sin embargo, ningún motor real optimizará la consulta anterior para implementar los mismos algoritmos, i. mi. almacenar un contador en una variable e incrementarlo.
Hará lo que se le dice que haga: contar las filas una y otra vez.
Para optimizar las consultas que necesita para ver realmente lo que está sucediendo detrás de escena, y eso es lo que los planes de ejecución le muestran.
Es posible que desee leer este artículo en mi blog: