Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скорость LEFT OUTER JOIN / 7 сообщений из 7, страница 1 из 1
11.04.2018, 18:34
    #39628675
Saidumar Khodjaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
Добрый день!

Есть две таблицы:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Goods:
Good_ID
Good_Name

Transactions:
Trans_ID
Trans_Date
Trans_Good_ID
Trans_Amount



Первая маленькая, вторая больше (порядка 50000 записей) и постоянно растет

Простейший запрос на обединение
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
  dbo.Goods.Good_Name,
  SUM(dbo.Transactions.Trans_Amount) AS Good_Rest
FROM
  dbo.Transactions
  LEFT OUTER JOIN dbo.Goods ON (dbo.Transactions.Trans_Good_ID = dbo.Goods.Good_ID)
WHERE
  dbo.Transactions.Trans_Date <= '2020/01/01' AND 
  dbo.Transactions.Trans_Good_ID > 1
GROUP BY
  dbo.Goods.Good_Name



выполняется мгновенно но не включает товары по которым не било поступлений,
если получить их с помощью обратного объединения
Код: sql
1.
RIGHT OUTER JOIN

то запрос выполняется намного дольше.

не подскажете как этого избежать?
...
Рейтинг: 0 / 0
11.04.2018, 18:57
    #39628690
fumitox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
Saidumar Khodjaev,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  
SELECT 
  dbo.Goods.Good_Name,
  SUM(dbo.Transactions.Trans_Amount) AS Good_Rest
FROM
dbo.Goods  
  LEFT OUTER JOIN dbo.Transactions ON (dbo.Transactions.Trans_Good_ID = dbo.Goods.Good_ID) and dbo.Transactions.Trans_Date <= '2020/01/01' AND   dbo.Transactions.Trans_Good_ID > 1
GROUP BY
  dbo.Goods.Good_Name
...
Рейтинг: 0 / 0
11.04.2018, 19:01
    #39628693
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
Saidumar Khodjaev,

dbo.Transactions.Trans_Good_ID > 1
как бы подразумевает, что у вас в таблице Goods есть соотв. запись, не так ли?
К чему тогда Left outer ?
...
Рейтинг: 0 / 0
12.04.2018, 12:34
    #39629017
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
делай inner join - оптимизитор его сможет развернуть и lookup-ить по индексу товары сканя транзакции (или хэш джоин с пробами в меньшей) и будет так же быстро как и транзакции лефт товары
...
Рейтинг: 0 / 0
12.04.2018, 12:39
    #39629025
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
Ivan Durakделай inner join - оптимизитор его сможет развернуть и lookup-ить по индексу товары сканя транзакции (или хэш джоин с пробами в меньшей) и будет так же быстро как и транзакции лефт товары
не важно на результат, просто делай INNER JOIN
...
Рейтинг: 0 / 0
12.04.2018, 16:44
    #39629308
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
TaPaKIvan Durakделай inner join - оптимизитор его сможет развернуть и lookup-ить по индексу товары сканя транзакции (или хэш джоин с пробами в меньшей) и будет так же быстро как и транзакции лефт товары
не важно на результат, просто делай INNER JOIN

Не надо соединение совать под группировку.
Код: sql
1.
2.
3.
4.
5.
6.
with t as ( select * from dbo.Transactions WHERE Trans_Date <= '20200101' AND Trans_Good_ID > 1 ) 
    , g as ( select * from dbo.Goods )
    , x as ( select Trans_Good_ID,  SUM(Trans_Amount) AS Good_Rest from t group by Trans_Good_ID )
  select *
     from g left outer join x on  x.Trans_Good_ID = g.Good_ID
;



Если будет и так медленно - x надо засунуть во времянку.
...
Рейтинг: 0 / 0
12.04.2018, 16:58
    #39629320
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость LEFT OUTER JOIN
думаешь хэш груп при гуппировке делается быстрее чем при хэш джоине?????
с чего бы???
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скорость LEFT OUTER JOIN / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]