примере ниже видно, что КХ полностью читает данные два раза. А хотелось бы, чтоб это делалось один раз и следующие обращения происходили уже к данным в памяти.
CREATE TABLE number100
(
number Int32
)
ENGINE = MergeTree
ORDER BY number
SETTINGS index_granularity = 8192
insert into number100
select * from numbers(100)
with t as (
select * from number100
where number >= 50
)
select * from (
select count(*) from t t where t.number = 70
) t1 cross join (
select count(*) from t t where t.number > 60
) t2
Read 200 rows
В КХ из with запросы по сути подставляются, как макросы. Поэтому, во всяком случае пока, так и будет - сколько будет селектов по t, столько раз и будет фактически выполняться это подзапрос
Понятно. Спасибо! Но такая оптимизация в некоторых случаях была бы, конечно, полезна.
Безусловно. Этого точно не хватает. Думаю, что со временем разработчики доработают CTE
материализуются только скалярные выражения такого вида with () as t
Вот я и был уверен, что и мой случай сработает. Видимо в документации читал о скалярных выражениях.
положить во временную таблицу
Обсуждают сегодня