работает, а когда указываю конкретные поля, которые используются в запросе - нет? Причем, если в таблице есть вторая проекция со звездочкой по другому полю, то она может начать использоваться, но не та, что мне реально нужна.
Причем, если сделать бесполезную проекцию с GROUP BY toDate(EventDT), Value, ItemID - то она работает с определенными полями.
CREATE TABLE items
(
`EventDT` DateTime,
`ItemID` UInt32,
`Value` UInt32
)
ENGINE = ReplacingMergeTree(EventDT)
ORDER BY (ItemID, toDate(EventDT))
-- Вот так не использует
ALTER TABLE items ADD PROJECTION value_projection (
SELECT ItemID, Value
ORDER BY toDate(EventDT), Value
);
-- Вот так использует проекцию
ALTER TABLE items ADD PROJECTION value_projection (
SELECT *
ORDER BY toDate(EventDT), Value
);
explain indexes=1
SELECT ItemID, Value FROM items
WHERE Value > 1
ORDER BY toDate(EventDT), Value LIMIT 1;
а если сделать проекцию с SELECT ItemID, Value, EventDT (или toDate(EventDT)), будет использоваться проекция? просто насколько я вижу по опыту использования, проекция триггерится, только если запрос использует поля, которые в ней присутствуют в селекте.
как показывает мне мой опыт работы с проекциями, проекция используется, только если проекция содержит все поля, которые используются в запросе (это не обязательно должны быть все поля исходной таблицы) набросал пример: https://fiddle.clickhouse.com/0e08fc68-6bff-49f8-9c9c-b0fc3e06d06a
Обсуждают сегодня