Spools are expensive operators, but they are introduced in a query plan as an optimization, typically to compensate for inadequate indexes, or to optimize otherwise complex queries by significantly speeding up the overall runtime of a query. A Spool reads data and saves it in a worktable in TempDB. This process is used whenever the Query Optimizer knows that the density of a column is high (therefore having low selectivity) and the intermediate result is very complex to calculate. If this is the case, SQL Server computes the result once and stores it in a Spool so it can be searched later in the execution. Spools only exist while the query is being executed.
Conceptually, all physical Spool operators function the same way:
- Read all ...