Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Могат ли заявки, които четат променливи на таблица, да генерират паралелни планове за изпълнение в SQL Server 2008?

Добре, имам паралелен избор, но не върху променливата на таблицата

Направих го анонимно и:

  • BigParallelTable е 900 000 реда и ширина
  • Поради наследени причини BigParallelTable е частично денормализиран (ще го поправя по-късно, обещавам)
  • BigParallelTable често генерира паралелни планове, защото не е идеален и е „скъп“
  • SQL Server 2005 x64, SP3, компилация 4035, 16 ядра

Заявка + план:

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]))

Сега, като се замислим за това, променливата на таблицата почти винаги е сканиране на таблица, няма статистика и се приема за един ред „Очакван брой редове =1“, „Действителен.. =3“.

Можем ли да декларираме, че променливите на таблицата не се използват паралелно, но съдържащият план може да използва паралелизъм другаде? Така че BOL е правилен, а статията за SQL съхранение е грешна



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сблъсък на типа операнд:int е несъвместим с дата + Изявлението INSERT е в конфликт с ограничението FOREIGN KEY

  2. Задайте лимит за редове на таблица в SQL

  3. Сума от разликата DateTime в sql (HH.MM)

  4. JSON в SQL Server

  5. Изтриване на големи количества данни от SQL Server 2008