Производительность SQL Server Query с и без временной таблицы - PullRequest
0 голосов
/ 07 мая 2019

Я работаю над улучшением производительности для запроса и обнаружил странную ситуацию.

Запрос выглядит как

SELECT 
    some_columns_and_conditions,
    SUM(val_1/100) as "val_1",
    SUM(val_2/100) as "val_2",
    SUM(val_3/100) as "val_3",
    SUM(val_4/100) as "val_4",
    SUM(val_5/100) as "val_5"
FROM
    tab_1 tb1
INNER JOIN 
    tab_2 tb2 ON (tb1.col = tb2.col)  
INNER JOIN 
    (SELECT few_cols 
     FROM tab_3 
     WHERE ... ) tb3 ON (tb2.id = tb3.id)  
few_more_inner_joins
WHERE
    <filterings>
GROUP BY 
    some_columns_and_conditions 
ORDER BY 
    columns

Это работает и занимает около 15 минут.

Запрос работает с 4 таблицами:

  • 2 из них маленькие
  • 1 таблица имеет 20M записей, запрос извлекает около 10k
  • последние запросы имеют 40M записей и возвращают около 3-4M строк

Запрос выдает около 3-4 строк.

Я пытался переписать это с временной таблицей. Первая попытка уменьшить время выполнения в 2 раза:

drop table #tmp

select ... 
into #tmp
from ... 

select * from #tmp

К сожалению, для меня это неприемлемо. Мне нужно достичь аналогичного результата с запросом.

Можете ли вы помочь мне с некоторыми вопросами:

  • Почему это улучшило производительность в 2 раза?
  • Как я могу достичь того же с помощью одного запроса?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...