W
Where is data, Lebowski
@double_data229 подп.
279просмотров
11 октября 2025 г.
Score: 307
​​️⃣ Сортировка, не всё хорошо, что упорядочено! При создании таблицы указывается набор полей по которым данные будут отсортированы и по которым создадутся индексы. ORDER BY (param1, param2, ...., paramN) А что здесь-то интересного: - кол-во (можно же и 1 и 100500) - выбор самих параметров (а чего выбирать-то? типы, категории, время, ...) - взаимное расположение (что за чем должно следовать) А что выбрать: - обычно выбирают те, поля по которым таблица чаще всего фильтруется (у нас же индексы есть) Кол-во полей: - в пределах разумного, 3-5. Большое кол-во замедляет вставку + вызывает фоновый процесс мержей (нагружает CPU). Хороший алгоритм для заполнения ORDER BY есть у altinity Как расположить: - дока говорит, что следует располагать поля по уменьшению кардинальности (то есть поля с меньшим кол-вом уникальных значений должны быть левее, например, пол, ос, страна и др) - это верно, тк при использовании такой фильтрации кол-во читаемых данных уменьшается минимум на 50% - altinity добавляет: поля наиболее часто используемые при фильтрации следует располагать левее (например, дата) Возникает противоречение: уникальных дней больше чем значений пола, но по дате фильтруются чаще -> в общем случае рекомендация будет такой: сначала располагаем, что по чему чаще фильтруемся, далее в порядке уменьшения кардинальности, то есть для примера выше ORDER BY (report_date, gender, ....) На самом деле работать может и любая другая комбинация (gender, country, report_date, ...) или еще хуже (gender, country, ...., report_date) - главным критерием является взаимное распределение значений, иными словам: - за каждый день отчета есть все значения пола и все страны и их распределения между днями не различаются, то вариант с датой, указанной первой - ваш выбор 👍 - а вот если распределение день ото дня различается, то надо ресерчить - готовых решений нет. Можно предложить визуальный пример: данные в файлах сортируются сначала по одному первому атрибуту, после по 2 и тд и при одной и тоже фильтрации WHERE dt = '2025-10-06' and main = 'Clouds' будет прочитано разное кол-во строк: !clickhouse-notes-order-by.png Выбирайте правильное партиции и верный ORDER BY - и эффективные запросы не заставят себя ждать😉 #clickhouse #order_by
279
просмотров
2268
символов
Да
эмодзи
Нет
медиа

Другие посты @double_data

Все посты канала →
​​️⃣ Сортировка, не всё хорошо, что упорядочено! При создани — @double_data | PostSniper