当前位置: 首页 > article >正文

clickhouse跳表索引最佳实践--minmax索引+Set索引

背景

我们知道对于clickhouse这种列式存储数据库来说,它虽然也提供了与mysql的btree的二级索引类似的跳表索引的功能,但是其实跳表索引和btree的二级索引有根本上的不同,比如mysql的二级索引一般来说应用于高基数的列的效果是最佳的,但是对于各种类型的跳表索引来说,高基数的列很不适合用来构建跳表索引

跳表索引

我们先大概改下几种不同类型的跳表索引的数据结构:
在这里插入图片描述
下面我们就来介绍下每种不同类型的跳表索引:
1.minmax跳表索引类型:这是保存每个索引块(8192gradularities条记录)中最大值和最小值的元祖构成的索引类型,主要用途用于根据范围值查找记录(比如 val > 100 and val < 200)等,因为他可以根据100和200判断出来某个索引块是否包含要查找的记录,这样就可以过滤掉那些不满足条件的索引块
2.Set索引类型:这是保存每个索引块(8192
gradularities条记录)中不重复的值的索引类型,主要用途比如保存类似于日志级别的列,大部分索引块中保存的日志级别都是INFO级别,所以当查找WARN或者ERROR级别的日志时就可以跳过大部分的INFO级别的索引块,对查找WARN或者ERROR级别的日志性能极好,不过如果你查找INFO级别的列的话,这个跳表索引由于大部分都是INFO的索引块,所以查找性能不好,比全列扫描都差。 备注: Set索引类型里面有一个max_size参数,表示如果某个索引块中唯一的value的数量大于max_size,那么这个索引块就不保存对应的8192gradularities条记录中唯一值,到时候查找的时候对于这些(8192gradularities条记录)的数据块就只能都读取到内存中查找了

其实无论是minmax索引还是Set索引,我们从这个索引的存储结构中得到如下的结论:gradularities个数据块内的记录如果聚在一起,比如对于minmax索引来说,这几个数据块内的数值范围比较接近,而对于Set索引来说,这几个数据块内的元素值只有少数的几个唯一值的话,跳数索引是可以过滤更多的其他索引块的记录的,而这个数据块的数据记录如何排列又和我们的主键/排序键的定义有关.所以选择不同的主键/排序键会影响跳数索引的效率

参考文献:
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#functions-support

https://clickhouse.com/docs/en/optimize/sparse-primary-indexes#related-content


http://www.kler.cn/news/12004.html

相关文章:

  • Spring中Bean的安全性问题--面试题
  • Spring IoC注解开发
  • 【我的创作纪念日】恒川的创作一周年
  • 剪枝与重参第五课:前置知识
  • 亚马逊云科技十七年持续进化,解锁Amazon S3的七项新发布
  • 关于运行时内存数据区的一些扩展概念
  • NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
  • elasticsearch 拼音分词器 自动补全。
  • 【测试面试汇总2】
  • 3.3 泰勒公式
  • 少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年12月
  • 顺序表(更新版)——“数据结构与算法”
  • Go语言流处理,工厂模式,命令参数,序列化,单元测试
  • 计算机网络 实验六
  • DC插装式流量阀压力阀
  • UDP/TCP的相关性你知道几个?
  • St link V2驱动安装方法
  • Spring Security 6.0系列【22】源码篇之防护跨站请求伪造流程分析
  • 全回显SSRF测试两则
  • C语言 字符串解析strchr/strrchr/strtok//strtok_r函数使用
  • 苏州源特VPT87DDF01B 隔离变压器 小体积/SMD/3000VDC 隔离
  • 历代程序员都无法逃脱的诅咒 -- 低代码
  • nodejs+vue家庭菜谱食谱管理系统
  • C++ 图系列之基于有向无环图的拓扑排序算法
  • oracle远程克隆pdb
  • 协议篇之以太网UDP协议
  • python爬虫基础
  • 场景搭建、素材库、在线标绘等,四维轻云地理空间数据云管理平台新增了这些功能
  • 【python学习】基础篇-列表推导式快速生成列表
  • vue2 和 vue3 共存