Особенности оптимизации ClickHouse. (Автор @alexxxxxxela)
Покажу один прикол с кликом и велик шанс, что это пригодится, если будете трогать большие таблицы или что-либо оптимизировать.
Вот основные моменты: есть большая таблица на >1kkk записей ключевое поле chrt_id UInt64, order by chrt_id
Нужно выполнить операцию тяжелую, поэтому нужно брать кусками данные.
Куски берем через разделение всех chrt_id на равные промежутки. Это делается через quantiles. получаем числа [417248015.8, 642524841, 880088631, 1249379586.8]
ну и делаем запрос:
select chrt_id, col2, col3 from table where chrt_id < 417248015.8 and тяжелое условие
Встает вопрос, какая у этого запроса проблема?
Ответ:
Не используется индекс сортировки из-за неприведенных типов данных в фильтрации.
Столбец приводится к типу float для сравнения, поэтому запрос читает каждую строку, чтобы сперва сделать каст и затем сравнить.
Если убрать дробную часть, тогда условие будет корректно и будет читаться только 1/5 строк