не по своему вопросу, для кругозора. Может, здесь кто подскажет быстрее. Это нормально, что условие из запроса на view, на столбец, который является ключом для исходной таблицы, не оптимизируется?
                  
                  
                  
                  
                  
                  Table metrics_raw
                  
                  
                  (
                  
                  
                      itemid Int64,
                  
                  
                      clock DateTime,
                  
                  
                      value Decimal64(4)
                  
                  
                  )
                  
                  
                  ENGINE = ReplicatedMergeTree( ... )
                  
                  
                  PARTITION BY toYYYYMMDD(clock)
                  
                  
                  ORDER BY (itemid, clock);
                  
                  
                  
                  
                  
                  Table metrics_hour_state
                  
                  
                  (
                  
                  
                      itemid Int64,
                  
                  
                      clock DateTime,
                  
                  
                      value AggregateFunction(avg, Decimal64(4))
                  
                  
                  )
                  
                  
                  ENGINE = ReplicatedAggregatingMergeTree( ... )
                  
                  
                  PARTITION BY toYYYYMMDD(clock)
                  
                  
                  ORDER BY (itemid, clock);
                  
                  
                  
                  
                  
                  MV aggregator_hour
                  
                  
                  TO metrics_hour_state AS 
                  
                  
                  SELECT 
                  
                  
                    itemid, 
                  
                  
                    toStartOfHour(clock) clock,
                  
                  
                    avgState(value) value
                  
                  
                  FROM metrics_raw
                  
                  
                  GROUP BY itemid, clock;
                  
                  
                  
                  
                  
                  View metrics_hour
                  
                  
                  AS 
                  
                  
                  SELECT   itemid,   clock,  avgMerge(value) value
                  
                  
                  FROM metrics_hour_state
                  
                  
                  GROUP BY itemid, clock;
                  
                  
                  
                  
                  
                  Запрос
                  
                  
                  select itemid, clock, value from metrics_hour where itemid = 54321
                  
                  
                  Приводит к полному сканированию metrics_hour_state.
                  
                  
                
уточню вопрос: а) ожидается ли появление оптимизации б) есть ли более изящное решение здесь и сейчас, чем переписывать запрос без обращения к view, как SELECT itemid, clock, avgMerge(value) value FROM metrics_hour_state WHERE itemid = 54321 GROUP BY itemid, clock разница по потреблению памяти между ними огромная, 1536 МБ против 32 МБ (примерно)
Обсуждают сегодня