Size: a a a

2021 June 28

IS

Igor Sergeichik in sql_ninja
А, сорян, не дочитал
источник

oa

oleg aronov in sql_ninja
источник

L

Les in sql_ninja
ну раз не логично - не используй
источник

Y

Yuriy T in sql_ninja
Аргумент👌
источник

A

Aleksey in sql_ninja
Спасибо
источник

N

Ninja Reputation in sql_ninja
Репутация @unfilled: 3
источник

L

Les in sql_ninja
with cte as ( select *  from table ) -- читаем с диска
select * from cte t1 -- читаем из памяти
   join cte t2 on t1.id = t2.id; -- читаем из памяти
----

select * from table t1 -- читаем с диска
   join table t2 on t1.id = t2.id; -- читаем с диска
источник

oa

oleg aronov in sql_ninja
Ну это же от СУБД зависит. Для MS одинаковые планы и количество физических чтений будет
источник

IS

Igor Sergeichik in sql_ninja
Так первый вариант если на подзапрос переделать разве не так же работать будет?
источник

NP

Nick Proskuryakov in sql_ninja
зато все сильно изменится если взять например TOP (100) и там и там
источник

Y

Yuriy T in sql_ninja
+1
источник

oa

oleg aronov in sql_ninja
Пример можно? Не вижу в чём разница кто именно заинлайнинт cte - я руками, или оптимизатор.
источник

N

Ninja Reputation in sql_ninja
Репутация @unfilled: 4
источник

NP

Nick Proskuryakov in sql_ninja
конечно, в случае прямого join таблицы саму на себя, сначала будет join потом top.
источник

NP

Nick Proskuryakov in sql_ninja
в случае cte, будет один раз прочитано N строк и они же доедут в join
источник

NP

Nick Proskuryakov in sql_ninja
разница будет большой
источник

NP

Nick Proskuryakov in sql_ninja
(10 rows affected)
Таблица "%%%%_Log". Число просмотров 9, логических чтений 5662015, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(10 rows affected)
Таблица "Worktable". Число просмотров 10, логических чтений 58, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица ""%%%%_Log". Число просмотров 2, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
источник

oa

oleg aronov in sql_ninja
А пример запроса можно? Я примерно понял, что ты имеешь в виду, но мне кажется, что это будут не взаимозаменяемые запросы
источник

NP

Nick Proskuryakov in sql_ninja
select top (10) * from dbo.%%%%_Log t1
join dbo.%%%%_Log t2 on t1.id = t2.id;

with cte as ( select top (10) *  from dbo.%%%%_Log )
select * from cte t1
join cte t2 on t1.id = t2.id;
источник

oa

oleg aronov in sql_ninja
Ну так запрос с cte разворачивается не в это:
select top (10) * from dbo.%%%%_Log t1
join dbo.%%%%_Log t2 on t1.id = t2.id;

блин, тяжело редактировать, ниже допишу
источник