Почему 'ХЭШИРОВАНИЕ' или 'ЦИКЛ ПРИСОЕДИНЯЮТСЯ', улучшаются, это сохранило proc?

Я вижу ответы здесь, которые не будут работать в синтаксисе SQL Server. Я использовал бы:

select t.range as [score range], count(*) as [number of occurences]
from (
  select case 
    when score between  0 and  9 then ' 0-9 '
    when score between 10 and 19 then '10-19'
    when score between 20 and 29 then '20-29'
    ...
    else '90-99' end as range
  from scores) t
group by t.range

РЕДАКТИРОВАНИЕ: см. комментарии

7
задан jball 11 June 2010 в 19:45
поделиться

1 ответ

HASH JOIN полезно, когда большой процент строк вносит вклад в набор результатов.

В вашем случае создание HASH TABLE на A или B , и сканирование другой таблицы дешевле, чем выполнение NESTED LOOPS по индексу на B .ID или объединение отсортированных наборов результатов, которые оптимизатор использовал перед подсказкой.

Оптимизатор SQL Server этого не заметил: возможно, потому что вы не собирали статистику, возможно, потому что распределение ваших данных искажено .

Обновление:

Поскольку вы упомянули, что LOOP JOIN повысили скорость, возможно, порядок JOIN был выбран оптимизатором неправильно.

7
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: