примере ниже видно, что КХ полностью читает данные два раза. А хотелось бы, чтоб это делалось один раз и следующие обращения происходили уже к данным в памяти.
                  
                  
                  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
Вот я и был уверен, что и мой случай сработает. Видимо в документации читал о скалярных выражениях.
положить во временную таблицу
Обсуждают сегодня