OK, mám paralelní výběr, ale ne na proměnné tabulky
Anonymizoval jsem to a:
- BigParallelTable má 900 tisíc řádků a je široký
- Z důvodů starších je BigParallelTable částečně denormalizován (opravím to později, slibuji)
- BigParallelTable často generuje paralelní plány, protože to není ideální a je to „drahé“
- SQL Server 2005 x64, SP3, sestavení 4035, 16 jader
Dotaz + plán:
DECLARE @FilterList TABLE (bar varchar(100) NOT NULL)
INSERT @FilterList (bar)
SELECT 'val1' UNION ALL 'val2' UNION ALL 'val3'
--snipped
SELECT
*
FROM
dbo.BigParallelTable BPT
JOIN
@FilterList FL ON BPT.Thing = FL.Bar
StmtText
|--Parallelism(Gather Streams)
|--Hash Match(Inner Join, HASH:([FL].[bar])=([BPT].[Thing]), RESIDUAL:(@FilterList.[bar] as [FL].[bar]=[MyDB].[dbo].[BigParallelTable].[Thing] as [BPT].[Thing]))
|--Parallelism(Distribute Streams, Broadcast Partitioning)
| |--Table Scan(OBJECT:(@FilterList AS [FL]))
|--Clustered Index Scan(OBJECT:([MyDB].[dbo].[BigParallelTable].[PK_BigParallelTable] AS [BPT]))
Nyní, když o tom přemýšlíme, proměnná tabulky je téměř vždy skenování tabulky, nemá žádné statistiky a předpokládá se jeden řádek "Odhadovaný počet řádků =1", "Skutečný.. =3".
Můžeme prohlásit, že tabulkové proměnné se nepoužívají paralelně, ale obsahující plán může používat paralelismus jinde? BOL je tedy správný a článek SQL Storage je chybný