如何为clickhouse创建索引?

Posted

技术标签:

【中文标题】如何为clickhouse创建索引?【英文标题】:How to create index for clickhouse? 【发布时间】:2021-11-12 02:21:46 【问题描述】:

我在 clickhouse 中存储了大约 5e9(每小时 15e4 条记录)记录。记录是按时间顺序排列的。当我运行一些 time_range 为 10 分钟的查询时:

select * from table_name where tag1='xxx' and 'tag2'='xxx' and server_time > '2020-01-01 00:00:00' and server_time < '2020-01-01 00:10:00'

卡住了。我没有创建索引。但是文档中的 clickhouse 索引似乎与 MongoDB 中的 B-Tree 索引不同。那么我应该如何创建索引呢?进一步的,你能做一个简单的解释吗?

【问题讨论】:

【参考方案1】:

您使用什么表引擎? 在 Clickhouse 中存储数据的主要表引擎是 MergeTree,其中提供了一些开箱即用的索引(“稀疏索引”)。

在您的情况下,您可以像这样创建表:

CREATE TABLE table_name(
  server_time DateTime,
  tag1 String,
  tag2 String,
  ...
) ENGINE = MergeTree() ORDER BY time

ORDER BY time 部分将为您完成这项工作:现在所有使用 server_time 过滤的请求都将使用索引。

您可以在官方文档中阅读更多关于 MergeTree 和索引的信息:https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#primary-keys-and-indexes-in-queries

【讨论】:

以上是关于如何为clickhouse创建索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何为uitableview的所有行和所有部分创建索引路径?

如何为 SQL 表达式创建数据库索引?

如何为多变量索引匹配公式创建 UDF

如何为大型数据集创建 UITableView 索引

如何为mysql中的现有表创建索引?

如何为动态生成 Select 语句的 30 列表创建索引