Oke, saya punya pilihan paralel tapi tidak pada variabel tabel
Saya telah menganonimkannya dan:
- BigParallelTable memiliki lebar 900 ribu baris
- Untuk alasan lama, BigParallelTable sebagian didenormalisasi (akan saya perbaiki nanti, janji)
- BigParallelTable sering membuat paket paralel karena tidak ideal dan "mahal"
- SQL Server 2005 x64, SP3, build 4035, 16 core
Kueri + paket:
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]))
Sekarang, memikirkannya, variabel tabel hampir selalu merupakan pemindaian tabel, tidak memiliki statistik dan diasumsikan satu baris "Perkiraan jumlah baris =1", "Actual.. =3".
Bisakah kita mendeklarasikan bahwa variabel tabel tidak digunakan secara paralel, tetapi rencana yang berisi dapat menggunakan paralelisme di tempat lain? Jadi BOL benar dan artikel Penyimpanan SQL salah