2009-12-18 17 views
8

Tengo una consulta que crea varias tablas temporales y luego inserta datos en ellas. Por lo que entiendo, esta es una posible causa de Table Spool. Cuando miro mi plan de ejecución, la mayor parte de mi procesamiento se gasta en Table Spool. ¿Hay alguna buena técnica para mejorar estos tipos de problemas de rendimiento? ¿El uso de una vista o un CTE me ofrece algún beneficio sobre las tablas temporales?Deshacerse de Table Spool en SQL Server Plan de ejecución

También me di cuenta de que cuando paso el mouse sobre cada columna de la tabla, la lista de salida es de la misma tabla temporal.

Respuesta

15

Bueno, con la información que proporcioné, solo puedo decir que: el optimizador de consultas ha elegido el mejor plan posible. Utiliza spools de tabla para acelerar la ejecución. Las alternativas que no usan carretes de tabla serían incluso más lentas.

¿Qué le parece mostrar la consulta, la (s) tabla (s) de esquema y cardinalidad, y el plan.

actualización

luego, entiendo si no nos puede mostrar la consulta. Pero es realmente difícil adivinar por qué el motor prefiere el spooling sin conocer detalles. Le recomiendo que revise el blog de Craig Freedman, es ingeniero en el equipo de optimizador de consultas y ha explicado gran parte del funcionamiento interno del optimizador de SQL 2005/2008. Aquí hay algunas entradas que pude encontrar rápidamente que toque el tema de la cola de impresión en un solo otra forma o:

SQL también tiene un blog interesante en http://blogs.msdn.com/psssql/
Y 'sqltips' (el blog del equipo del motor relacional) tiene algunos consejos, como Spool operators in query plan...

+0

Desafortunadamente, creo que a mi trabajo no le gustaría que yo compartiera ese tipo de información. Mi comprensión del spooling es limitada, pero pensé que se usaba el spooling cuando te referías a una tabla temporal. ¿No pondría esa información en una vista indexada para alejarnos de eso sin afectar negativamente el rendimiento? –

Cuestiones relacionadas