SQL Сервер: почему SELECT * INTO быстрее, чем SELECT * (исключая сеть) - PullRequest
0 голосов
/ 18 февраля 2020

Почему Query2 значительно превосходит Query1?

Query1:

SELECT * FROM [SomeComplexView];

Занимает 4 минуты, не использует параллелизм в плане запросов

Запрос2:

SELECT * INTO #t1 FROM [SomeComplexView];
SELECT * FROM #t1;

Занимает 15 секунд, использует параллелизм. Я думаю, что ответ должен быть довольно простым и обобщенным c, поэтому я опускаю сложности представления.

1 Ответ

0 голосов
/ 19 февраля 2020

http://dataeducation.com/next-level-parallel-plan-forcing-an-alternative-to-8649/

Когда оптимизатор запросов решает, выбирать ли параллельный план, он сначала оценивает стоимость последовательного плана, а затем сравнивает ее с стоимость параллельного плана. Если стоимость параллельного плана ниже, это тот, который используется. Стоимость параллельного плана основана на серийной стоимости, но с несколькими ключевыми изменениями: ...

--estimated plans
--serial cost:399
--parallel cost:204 <---!
select a.*
into #abc
from master.dbo.spt_values as a
cross join master.dbo.spt_values as b
--option(maxdop 1) 
--option (maxdop 2)


--serial cost: 28 <---!
--parallelx2 cost:41
--parallelx4 cost:20 
--parallelx8 cost:10
select a.*
from master.dbo.spt_values as a
cross join master.dbo.spt_values as b
--option (maxdop 1)
--option (querytraceon 8649, maxdop 2)
...