de Martin LE TARNEC.

Obtener un plan de ejecución


Con SQL Server, existen varias maneras para obtener un plan de ejecución. Las dos más importantes son:

Mediante un gráfico

La representación gráfica de los planes de ejecución de SQL Server es fácilmente accesible en Management Studio pero es difícil de compartir porque la información de predicados sólo es visible cuando se apunta el ratón sobre la operación (“hover”).

Tabular

El plan de ejecución de forma tabular es complicado de leer pero fácil de copiar porque muestra toda la información relevante al mismo tiempo.

Mediante un gráfico

El plan de ejecución de forma gráfica se genera con uno de los dos botones resaltados abajo.

El botón izquierdo explica directamente la operación resaltada. El derecho captura el plan de ejecución para la próxima vez que se ejecute la sentencia SQL.

En ambos casos, la representación gráfica del plan de ejecución aparece dentro de la pestaña “Execution plan” de la hoja “Results”.

La representación gráfica es fácil de leer con un poco de práctica. Sin embargo, se muestra solamente la información principal: las operaciones y la tabla o el índice que actúan.

Management Studio muestra más información cuando se mueve el ratón sobre la operación (mouseover/hover). Eso hace más difícil compartir un plan de ejecución con todos los detalles.

Tabular

El plan de ejecución SQL Server de forma tabular se obtiene activando un perfil de la ejecución de una sentencia. El siguiente comando lo habilita:

SET STATISTICS PROFILE ON

Una vez habilitado, cada sentencia ejecutada produce un conjunto del resultado adicional. Por ejemplo, las sentencias select producen dos conjuntos de resultados; primero el resultado de la sentencia y después el plan de ejecución.

El plan de ejecución tabular es difícilmente utilizable en SQL Server Management Studio porque StmtText es demasiado amplio para que quepa en la pantalla.

La ventaja de esta representación es que puede copiarse sin perder la información relevante. Es muy práctico si se quiere publicar un plan de ejecución de SQL Server en un foro o una plataforma similar. En este caso, suele ser suficiente copiar la columna StmtText y formatearlo un poco:

select COUNT(*) from employees;
  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(...))
       |--Stream Aggregate(DEFINE:([Expr1005]=Count(*)))
            |--Index Scan(OBJECT:([employees].[employees_pk]))

Por último, se puede deshabilitar nuevamente el perfil:

SET STATISTICS PROFILE OFF

Acerca del autor

Foto de Markus Winand

Markus Winand enseña SQL eficiente, en casa y online. Mejora el tiempo de desarrollo utilizando SQL moderno y optimiza el tiempo de ejecución con indexación inteligente. Su libro Rendimiento SQL explicado se ha convertido en lectura obligada sobre el tema.

Adquiere tu libro en Amazon

Portada de “Rendimiento SQL explicado”: Ardilla corriendo en la hierba

La esencia del tuning de SQL en 200 páginas

Compra en Amazon
(solo en papel)

Libro y PDF también disponible en la tienda de Markus.

Contratar a Markus

La manera más rápida y fácil de beneficiarse de su extenso conocimiento y experiencia.
Aprende más »

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia