【问题标题】:Is 'distinct' an ordinary operation for ClickHouse?'distinct' 是 ClickHouse 的普通操作吗?
【发布时间】:2019-04-02 18:21:37
【问题描述】:

我想使用 ClickHouse 进行营销。大多数时候,他们不仅想知道有多少人使用某些功能,还想知道发送垃圾邮件的确切电子邮件。 将 ClickHouse 用于此目的是否是一个不错的选择(从...的表中选择 DISTINCT 电子邮件)? 'select COUNT' 和 'select DISTINCT' 在性能上有什么区别?

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    将 ClickHouse 用于此目的是否是一个不错的选择

    是的,ClickHouse 有不错的 HashTable 和 Aggregator 实现。它大量使用模板代码进行静态类型分派,并应用了大量内存技巧。它以紧凑的形式存储数据。

    我假设您想比较 select countselect count(distinct),因为 select distinct 是不同的野兽。 ClickHouse 将 count(distinct) 转换为聚合器 uniqExact,这比 count(*) 慢了大约 8 倍,但仍然比 Postgres 等传统数据库快得多。还有近似聚合器uniquniqCombineduniqHLL12 用于更快的估计,比count(*) 慢约1.5 倍。如果您需要更多信息,请参阅https://clickhouse.yandex/docs/en/query_language/agg_functions/reference/

    如果您的目标是select distinct,ClickHouse 仍然可以做得很好,它使用Set 数据结构来唯一化数据流(Set 也用于构建其 SQL in (...) 构造)。在不测量数据输出过程的情况下,它仅比普通的count(*) 慢 1.3 倍。

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2017-10-25
      • 2021-08-12
      • 1970-01-01
      • 2017-07-09
      • 2018-03-22
      相关资源
      最近更新 更多