У меня есть SQL-запрос, как показано ниже, без последнего оператора ORDER BY, запрос выполняется около 1 минуты, и с этим оператором запрос завершается через 2 секунды.
SELECT A.C2, B.C2
FROM
(
SELECT C1, C2
FROM A
WHERE C3 = something AND C2 = somethingelse
INNER JOIN
B
ON
A.C1 = B.C1
)
ORDER BY B.C2
Если посмотреть на план выполнения, кажется, что добавление оператора ORDER BY вызывает параллелизм.
При "ORDER BY" QueryPlan имеет вид: DegreeOfParallelism = "4" MemoryGrant = "94176" CachedPlanSize = "184" CompileTime = "35" CompileCPU = "35" CompileMemory = "1728"
Без "ORDER BY" QueryPlan имеет вид: QueryPlan DegreeOfParallelism = "1" MemoryGrant = "2432" CachedPlanSize = "120" CompileTime = "57" CompileCPU = "57" CompileMemory = "2488"
Я не мог понять причину сцены. Обычно я предполагаю, что ORDER BY увеличит время обработки запроса.
[Изменить]
Нет индекса B.C2, и он не является первичным или кластерным ключом.
A.C1 является первичным ключом и кластерным индексом.
A.C2 - пространственный индекс.
A.C3 является некластеризованным индексом.
B.C1 - первичный ключ и кластерный индекс.
В таблице А. имеется 4 столбца и 40 миллионов строк.
В таблице B 2 столбца и 8 миллионов строк.
Я использую Microsoft SQL Server 2008.
Спасибо!