Здравствуйте, Danchik, Вы писали:
D>Все таки SQL сервер такое оптимизирует, но да, для других молодых баз данных это было бы ускорением.
D>https://sqlperformance.com/2018/06/sql-performance/join-elimination-unnecessary-tables
Вот удивительно, всё-таки, как мир устроен. Сидим тут, спорим, и как раз параллельно чуваки из МС рассказывают ровно про эту тему
Проверил на своём 2017 експресс — вырезает.
Допилили-таки! Интересно, а допилили ли они переупорядочивание group by / join?
Это вторая из самых популярных semantic optimizations, которые раньше никто делать не умел.
Имеется в виду вот такой случай:
select city.id, city.Name, sum(o.amount)
from orders o
inner join city on o.Customer_City = city.id
group by city.id, city.Name
Семантически этот запрос строго эквивалентен
select city.id, city.Name, amount
from city inner join
(select Customer_City, sum(amount) as amount from orders group by orderId) o
on o.Customer_City = city.id
Благодаря, понятное дело, тому, что city.id — это PK, и дальнейшие группировки по зависимым полям этой таблицы нам гарантированно ничего не дадут.
При этом стоимость этих двух запросов отличается достаточно сильно — в клинических случаях в разы, т.к. group by по большим промежуточным результатам — это упс.