как документации есть таблица с таким определением:
ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate)
EventDate - дата и время
CounterID - числа с диапазоном значений из 0 - 10КК
Запросы будут с критерием выборки как по паре (CounterID, EventDate) так и только по EventDate.
Правильно ли иметь ключ сортировки именно в таком порядке столбцов? Для запросов только по EventDate лучше иметь обратный порядок, т.е. (EventDate, CounterID)? Причём он подходит и для запросов по паре.
Правильно?
Я бы сказал, если вы не будете потом пересортировывать данные по EventDate, то ваш пример будет работать оптимально
С каким порядком будет работать идеально, с таким: (EventDate, CounterID)? Не очень понимаю, что значит пересортировывать.
Ну например вы сделали запрос SELECT groupArray(CounterID) FROM table ORDER BY EventDate , то считайте пересортировали. Ну то есть вы в массив получили данные отсортированные по времени
Скорее всего, будут и такие запросы.
Если Вы планируете всегда в запросах использовать EventDate и иногда CounterID, то делайте ORDER BY (EventDate, CounterID). В противном случае у Вас будет фулскан партиции.
именно так: ограничения по дате будут всегда
можно еще попробовать так: ORDER BY (toDate(EventDate), CounterID, EventDate)
Вы, кажется, не учитываете, что в ClickHouse индекс задает физическую упорядоченность данных в таблице. Поэтому он один. Что касается CounterID, это немного тревожно, потому что похоже на OLTP.
Обсуждают сегодня