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

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

Код: 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
Скорость LEFT OUTER JOIN
    #39628690
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Скорость LEFT OUTER JOIN
    #39628693
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saidumar Khodjaev,

dbo.Transactions.Trans_Good_ID > 1
как бы подразумевает, что у вас в таблице Goods есть соотв. запись, не так ли?
К чему тогда Left outer ?
...
Рейтинг: 0 / 0
Скорость LEFT OUTER JOIN
    #39629017
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делай inner join - оптимизитор его сможет развернуть и lookup-ить по индексу товары сканя транзакции (или хэш джоин с пробами в меньшей) и будет так же быстро как и транзакции лефт товары
...
Рейтинг: 0 / 0
Скорость LEFT OUTER JOIN
    #39629025
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durakделай inner join - оптимизитор его сможет развернуть и lookup-ить по индексу товары сканя транзакции (или хэш джоин с пробами в меньшей) и будет так же быстро как и транзакции лефт товары
не важно на результат, просто делай INNER JOIN
...
Рейтинг: 0 / 0
Скорость LEFT OUTER JOIN
    #39629308
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Скорость LEFT OUTER JOIN
    #39629320
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаешь хэш груп при гуппировке делается быстрее чем при хэш джоине?????
с чего бы???
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скорость LEFT OUTER JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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