Clickhouse — это колоночная база данных от Яндекс. База специально разработана для аналитических задач на больших объемах.
База данных поддерживает индексы, но в отличие от классических СУБД, в ней есть ряд ограничений. Среди нескольких движков таблиц, наиболее продвинутый MergeTree поддерживает индексы.
Для каждой таблицы можно использовать только один индекс (первичный ключ). Основная задача индекса — иметь возможность отфильтровать большую таблицу с данными. Например, большую таблицу просмотров товаров по конкретному товару:
* date * product_id * product_category * product_name
Чтобы указать индекс, нужно просто перечислить колонки при создании таблицы:
CREATE TABLE products_views ( date Date, product_id UInt32, product_name String, product_category UInt8 ) ENGINE = MergeTree(date, (product_id), 8192)
Создание таблицы с индексом
Конструкция MergeTree
объявляет индекс:
date
— название колонки, в которой находится дата. В clickhouse это обязательно, т.к. все данные всегда распределены по значениям этой колонки.product_id
— название колонки, по которой строится индекс.8192
— гранулированность индекса (используйте значение из примера).SELECT count(*) FROM products_views WHERE product_id = 751
С такой структурой индекса, запросы будут эффективными:
#в таком запросе будет использован индекс
Индекс может состоять из нескольких колонок (составной индекс):
CREATE TABLE products_views ( date Date, product_id UInt32, product_name String, product_category UInt8 ) ENGINE = MergeTree(date, (product_id, url), 8192)
Составной индекс
Однако в этом случае, в выборке могут использоваться колонки слева-направо (фильтр по одной только колонке url
не использует индекс). Как и в других базах данных индекс будет использован в случае не только равенства, а и неравенства и операции IN
.
На текущий момент Clickhouse не поддерживает запрос EXPLAIN
. Однако в логе запросов можно убедиться, что индекс будет использован:
tail -f /var/log/clickhouse-server/clickhouse-server.log
Если индекс используется мы увидим такие строки в файле:
[ 20 ] default.stats (SelectExecutor): Key condition: (column 0 in [751, 751])
В противном случае, если базе не удалось использовать индекс, мы увидим вот что:
[ 20 ] default.stats (SelectExecutor): Key condition: unknown
Clickhouse поддерживает только один индекс на таблицу. Индекс может состоять из нескольких колонок (составной индекс). При использовании этих колонок в запросе WHERE
база оптимизирует выборку с помощью индекса.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…