优化索引粒度参数提升ClickHouse查询性能

这篇具有很好参考价值的文章主要介绍了优化索引粒度参数提升ClickHouse查询性能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当对高基数列进行过滤查询时,总是希望尽可能跳过更多的行。否则需要处理更多数据、需要更多资源。ClickHouse缺省在MergeTree表读取8192行数据块,但我们可以在创建表时调整该index_granularity 参数。本文通过示例说明如何调整该参数优化查询性能。

index_granularity 参数默认值

下面示例,创建表并插入1亿条记录,从1到100M-1:

CREATE TABLE deleteme
(
    `number` UInt64
)
ENGINE = MergeTree
PARTITION BY number % 10
ORDER BY number AS
SELECT number 
FROM numbers(100000000)

下面过滤行,条件为10000倍数的行:

SELECT *
FROM deleteme
WHERE number IN (
    SELECT number * 10000
    FROM numbers(100000)
)
FORMAT `Null`

Query id: 11412bc3-05de-4790-9b65-06b139761e0c

Ok.

0 rows in set. Elapsed: 1.211 sec. Processed 100.00 million rows, 800.00 MB (82.56 million rows/s., 660.45 MB/s.)

这里使用 FORMAT Null,我们仅想了解查询性能,无需返回结果。可以看到扫描了全表,这是因为index_granularity 默认为8192,大约10000行,意味着读所有数据块,大小800MB。

计算过程大概为,首先确定数据在哪个块,因为默认8192,因此所有块都有我们需要的数据。进入具体某个块之后再次采用二分法进行查找,虽然算法选择正确,但仍需要全表扫描。下面我们看减少index_granularity参数情况呢。

index_granularity=128

下面通过设置index_granularity=128,缩小处理数据量:

CREATE TABLE deleteme
(
    `number` UInt64
)
ENGINE = MergeTree
PARTITION BY number % 10
ORDER BY number
SETTINGS index_granularity=128 AS
SELECT number
FROM numbers(100000000)

下面运行上面相同查询:

SELECT *
FROM deleteme
WHERE number IN (
    SELECT number * 10000
    FROM numbers(100000)
)
FORMAT `Null`

0 rows in set. Elapsed: 0.785 sec. Processed 12.84 million rows, 102.73 MB (16.35 million rows/s., 130.81 MB/s.)

可以看到仅扫描了12.84百万行,仅102.73MB大小。极大地降低了查询时间和计算成本。因为粒度变小,自动跳过了很多数据块,具体到某个快时,数据量很小,查找速度自然很快,因此在这种场景下粒度小,查询速度更快。当然,调整index_granularity也会带来存储成本,索引会变大,因此插入变慢。有时读取较小的数据块并不能提升查询性能,这取决与查询方式。尽管如此index_granularity是一个很好的技巧,可以使提升查询性能。

总结

index_granularity参数默认为8192,在基数特别大的场景中,针对单条记录查询时,选择较低的index_granularity参数值,会有效提升查询性能。参考文档:Minimize processed bytes with index granularity | ClickHouse Knowledge Base (tinybird.co)

文章来源地址https://www.toymoban.com/news/detail-511870.html

到了这里,关于优化索引粒度参数提升ClickHouse查询性能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql高级三:sql性能优化+索引优化+慢查询日志

    内容介绍 单表索引失效案例 0 、思考题: 如果把 100 万数据插入 MYSQL ,如何提高插入效率 (1)关闭自动提交,只手动提交一次 (2)删除除主键索引外其他索引 (3)拼写mysql可以执行的长sql,批量插入数据 (4)使用java多线程 (5)使用框架,设置属性,实现批量插入 1、

    2024年02月12日
    浏览(46)
  • PostgreSQL性能调优:优化查询和索引设计

    随着数据量的增长和业务需求的变化,数据库性能成为了许多企业关注的焦点之一。在众多的数据库管理系统中,PostgreSQL因其稳定性和可靠性而备受青睐。然而,即使是最强大的系统也需要合适的调优,以确保其能够高效地处理大规模数据和复杂查询。 本文将介绍如何在P

    2024年02月07日
    浏览(39)
  • 【04-提升模型性能:集成学习与超参数优化】

      在前几篇博文中,我们已经介绍了一些机器学习的基础知识、Scikit-learn的核心工具与技巧,以及如何评估模型性能。本篇博文将重点讲解两个可以显著提升机器学习模型性能的高级策略:集成学习和超参数优化。   集成学习是一种策略,通过组合多个学习算法来获得比

    2024年04月29日
    浏览(28)
  • “更新查询超时时间“——优化ES索引更新性能的方法

    “更新查询超时时间”——优化ES索引更新性能的方法 在实际运用中,Elasticsearch (ES) 索引上的数据不可避免的需要进行更新操作。而update_by_query API 是一个十分强大的ES 更新功能工具,可以应对各种复杂的更新需求。然而,在进行高负载的大数据量操作时,update_by_query 会产生

    2024年02月03日
    浏览(37)
  • Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

    集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高,search 没有慢查询的状态。 2、集群压测性能不能上去,cpu 使用未打满,查询的 qps 上不去,且有队列堆积。 通过云厂商内核组的同

    2024年02月04日
    浏览(35)
  • ClickHouse进阶(十七):clickhouse优化-写出查询优化

    进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作,你

    2024年02月07日
    浏览(40)
  • ClickHouse性能优化

    目录 1. 了解ClickHouse的架构    1.1 ClickHouse的分布式架构    1.1.1 ClickHouse是读写分离架构吗    1.1.2 如何查询ClickHouse的分布式表    1.2 数据存储方式    1.2.1 如何配置数据压缩    1.2.2 如何选择合适的压缩算法    1.2.3 如何清理旧数据    1.2.4 关于`TTL`设置,自动删除过期数

    2024年02月10日
    浏览(32)
  • 【个人笔记】ClickHouse 查询优化

    ClickHouse是OLAP(Online analytical processing)数据库,以速度见长。ClickHouse为什么能这么快?有两点原因: 架构优越 列式存储 索引 数据压缩 向量化执行 资源利用 关注底层细节 但是,数据库设计再优越也拯救不了错误的使用方式,本文以MergeTree引擎家族为例讲解如何对查询优化

    2024年01月17日
    浏览(30)
  • 性能超越 Clickhouse | 物联网场景中的毫秒级查询案例

    物联网(Internet of Things,简称 IoT)是指通过各种信息传感、通信和 IT 技术来实时连接、采集、监管海量的传感设备,从而实现对现实世界的精确感知和快速响应,继而实现自动化、智能化管理。在查询 IoT 设备状态的场景下,吞吐量和时延是两个重要的性能指标。 在工业物

    2024年02月07日
    浏览(33)
  • 大数据场景下clickhouse查询时长优化sop

    ClickHouse的优化需要结合实际的数据特点和查询场景,从多个方面进行综合优化,以提高系统的性能和可靠性。 数据模型设计 :在使用ClickHouse之前,需要充分考虑数据模型的设计,因为数据模型的设计对查询性能有很大的影响。通常来说,ClickHouse适合存储大量的、高维度的

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包