Метод управления даннымиПартиционирование — это прежде всего метод управления данными, а не инструмент оптимизации запросов. Хотя в отдельных сценариях нагрузки оно может повышать производительность, его не стоит использовать как основной способ ускорения запросов; ключ партиционирования нужно выбирать очень тщательно, ясно понимая все последствия, и применять только тогда, когда это соответствует требованиям жизненного цикла данных или хорошо изученным сценариям доступа.
PARTITION BY при создании таблицы и обычно используется для группировки строк по временным интервалам, категориям или другим значимым для бизнеса признакам. Каждое уникальное значение выражения партиционирования образует собственную физическую партицию на диске, а ClickHouse хранит данные в отдельных частях для каждого из этих значений. Партиционирование упрощает управление данными, облегчает применение политик хранения и может быть полезно для определённых шаблонов запросов.
Например, рассмотрим следующую таблицу набора данных UK price paid с ключом партиционирования toStartOfMonth(date).
toStartOfMonth(date). Затем строки в каждой выявленной партиции обрабатываются обычно, проходя несколько последовательных шагов (① Сортировка, ② Разделение на столбцы, ③ Сжатие, ④ Запись на диск).
Более подробное объяснение партиционирования см. в этом руководстве.
При включенном партиционировании ClickHouse выполняет слияние частей данных только в пределах партиции, но не между партициями. Ниже это показано на примере таблицы выше:
Применение партиционирования
Выберите ключ партиционирования с низкой мощностью
toStartOfMonth(date), позволяет движку полностью пропускать нерелевантные партиции и их части.
Хотя партиционирование может повысить производительность в некоторых сценариях запросов, в первую очередь это средство управления данными. Во многих случаях запросы по всем партициям могут работать медленнее, чем в непартиционированной таблице, из-за большей фрагментации данных и необходимости сканировать больше частей. Используйте партиционирование осмотрительно и всегда следите за тем, чтобы выбранный ключ имел низкую мощность и соответствовал политикам жизненного цикла данных (например, срокам хранения через TTL). Если вы не уверены, нужно ли партиционирование, возможно, стоит начать без него и оптимизировать позже на основе наблюдаемого характера доступа.