MergeTree原理之二级索引

news2024/10/6 4:06:30

二级索引

除了一级索引之外,MergeTree同样支持二级索引,二级索引又称跳数索引,由数据的聚合信息构建而成。根据索引类型的不同,其聚合信息的内容也不同,当然跳数索引的作用和一级索引是一样的,也是为了查询时减少数据的扫描范围。跳数索引需要在 CREATE 语句内定义,它支持使用元组和表达式的形式声明,其完整的定义语法如下所示:

CREATE TABLE table_name (
    column1 type,
    column2 type,
    ......
    INDEX index_name expr TYPE index_type(...) GRANULARITY granularity
)

与一级索引一样,如果在建表语句中声明了跳数索引,则会额外生成相应的索引文件和标记文件<skp_idx_[Column].idx 与 skp_idx_[Column].idx>。

二级索引原理

不同的跳数索引之间,除了它们自身独有的参数之外,还都共同拥有granularity参数。对于跳数索引而言,index_granularity 定义了数据的粒度,而 granularity 定义了聚合信息汇总的粒度。换言之,granularity 定义了一行跳数索引能够跳过多少个 index_granularity 区间的数据。要解释清除 granularity 的作用,就要成跳数索引的生成规则说起,其规则大致是如下:首先按照 index_granularity 粒度间隔将数据划分成 n 段,总共有 [0, n - 1] 个区间(n = totol_rows / index_granularity,向上取整);接着根据索引定义时声明的表达式,从 0 区间开始依次按照 index_granularity 粒度从数据中获取聚合信息,每次向前移动一步,聚合信息聚合信息逐步累加。最后当移动 granularity 次区间时,则汇总并声称一行跳数索引数据。
在这里插入图片描述

二级索引类型

目前 MergeTree 共支持 4 种跳数索引,分别是:minmax、set、ngrambf_v1 和 tokenbf_v1,一张数据表支持同时声明多个跳数索引,比如:

CREATE TABLE skip_test
(
    ID        String,
    URL       String,
    Code      String,
    EventTime Date,
    INDEX a ID TYPE minmax GRANULARITY 5,
    INDEX b (length(ID) * 8) TYPE set(100) GRANULARITY 5,
    INDEX c (ID, Code) TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 5,
    INDEX d ID TYPE tokenbf_v1(256, 2, 0) GRANULARITY 5
) ENGINE = MergeTree()............

minmax

minmax:minmax 索引记录了一段数据内的最小值和最大值,其索引的作用类似分区目录的 minmax 索引,能够快速跳过无用的数据区间。

INDEX a ID TYPE minmax GRANULARITY 5

上述示例中 minmax 索引会记录这段数据区间内 ID 字段的极值,极值的计算涉及每 5 个 index_granularity 区间中的数据。

set

set:set 索引直接记录了声明字段或表达式的取值(唯一值,无重复),其完整形式为 set(max_rows),其中 max_rows 是一个阈值,表示在一个 index_granularity 内索引最多记录的数据行数。如果 max_rows = 0,则表示无限制

INDEX b (length(ID) * 8) TYPE set(100) GRANULARITY 5

上述实例中 set 索引会记录数据中 ID 的长度 * 8 后的取值,其中 index_granularity 内最多记录 100 条。

ngrambf_v1

ngrambf_v1:ngrambf_v1 索引记录的是数据短语的布隆表过滤器,只支持 String 和 FixedString 数据类型。ngrambf_v1 只能够提升 in、notIn、like、equals 和 notEquals 查询的性能,其完整形式为:

ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)

这些参数是一个布隆过滤器的标准输入,如果你接触布隆过滤器,应该对此十分熟悉,它们的具体含义如下:

  • n:token 长度,依据 n 的长度将数据切割为 token 短语
  • size_of_bloom_filter_in_bytes:布隆过滤器的大小
  • number_of_hash_functions:布隆过滤器中使用 Hash 函数的个数
  • random_seed:Hash 函数的随机种子

例如在下面的栗子中,ngrambf_v1 索引会依照 3 的粒度将数据切割成短语 token,token 会经过 2 个 Hash 函数映射之后再被写入,布隆过滤器大小为 256 字节。

INDEX c (ID, Code) TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 5

tokenbf_v1

tokenbf_v1:tokenbf_v1 索引是 ngrambf_v1 的变种,同样也是一种布隆过滤器索引,但 tokenbf_v1 除了短语 token 的处理方法外,其它与 ngrambf_v1 是完全一样的。tokenbf_v1 会自动按照非字符的、数字的字符串分割 token,具体用法如下所示:

INDEX d ID TYPE tokenbf_v1(256, 2, 0) GRANULARITY 5

bloom_filter 索引

布隆过滤器索引,其工作原理和布隆过滤器一样。和上面的短语 索引 的区别支持的返回更广 支持的数据类型有Int, UInt, Float, Enum, Date, DateTime, String, FixedString, Array, LowCardinality, Nullable, UUID, Map.

总结

最后,根据常见的场景,索引的使用总计如下。
在这里插入图片描述

参考

  1. https://help.aliyun.com/document_detail/209170.html
  2. https://mp.weixin.qq.com/s/Aa7BbutLoCK1Yn5vC5EuEA
  3. https://www.cnblogs.com/traditional/p/15218743.html
  4. https://mp.weixin.qq.com/s/VTTYMdY5A2SZNQdkZoXuhw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud】什么是微服务?什么是SpringCloud?

【SpringCloud】什么是微服务&#xff1f;什么是SpringCloud&#xff1f; 一、什么是微服务&#xff1f; 1. 微服务架构的演变历程 单体架构 单体架构优缺点 2. 分布式架构 分布式架构优缺点 存在问题 3. 微服务 微服务的架构特征 微服务的优缺点 二、SpringClo…

头部3D建模新应用:护目镜类产品定制,省时高效好选择

自从越来越多人开始了运动健身&#xff0c;不少运动爱好者已经从小白用户升级为高级运动玩家。随着大家对运动装备的要求也越来越高&#xff0c;不少爱好者开始选购一些轻量化的私人订制装备。例如&#xff0c;高度符合用户头部外型的游泳眼镜、骑行护目镜等等。 游泳眼镜是为了…

用ACLS去控制访问文件

ACLs可以针对多个用户以及群组&#xff0c;其他人做出权限控制。文件系统需要挂载被ACL支持。XFS文件系统支持ACL。EXt4在7版本中默认激活ACL.但在更早的版本需要使用acl选项去挂载申请。 上图第十个字符.代表已经有了acl.表示已经设置ALC。文件的owner可以对文件设置ACL. get…

【结构型】组合模式(Composite)

目录组合模式(Composite)适用场景组合模式实例代码&#xff08;Java&#xff09;组合模式(Composite) 将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 适用场景 想表示对象的部分-整体层次结构。希望用户忽略…

Java判断null的几种方式

组内code review时&#xff0c;有同学提到字符串判断空值的写法&#xff0c;如下两种&#xff0c;&#xff08;1&#xff09;null在后&#xff0c;Test public void testDemo1() {String str null;if (str null) {System.out.println("null在后");return;} }&#…

计算机的人机交互

1、 计算机的人机交互发展历史 计算机在刚开始出现的时候&#xff0c;因为占地广、造价高、耗电高的原因&#xff0c;一般都是给军队、政府使用的&#xff0c;并不是给个人使用的。随着计算机的发展&#xff0c;体积越来越小&#xff0c;出现了微型机&#xff0c;才使得计算机…

C# 数据库 ADO.NET概述

一 数据库 1 数据库&#xff08;Database&#xff09; 2 数据库管理系统&#xff08;DBMS&#xff09; 如Oracle,MS SQL Server 3 数据库系统的优点 共享性、独立性、完整性、冗余数据少。 4 管理功能 数据定义/操纵/完整/完全/并发 二 常用的数据库管理系统 1 微软的…

剑指offer----C语言版----第二天

目录 1. 二维数组中的查找 1.1 题目描述 1.1 思路一 1.2 思路二 1.3 思路三&#xff08;最优解&#xff09; 1. 二维数组中的查找 原题链接&#xff1a;剑指 Offer 04. 二维数组中的查找 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/er-wei-shu-…

WinServer 2012 域控组策略 用户发布软件部署

本例演示安装 Notepad 这款软件 因为域中发布软件只支持 msi 格式&#xff0c;所以要把 exe 转成 msi 格式&#xff0c;可以用这个软件 https://www.advancedinstaller.com/ 1、转换格式 &#xff08;1&#xff09;选择 MSI from EXE &#xff08;2&#xff09;定义项目名…

PLC实现十字路口交通灯的控制课程设计毕业设计

微信公众号&#xff1a;创享日记 对话框发送&#xff1a;plc十字路口 获取完整源码源程序文件 要求&#xff1a; 1、信号灯受启动及停止按钮的控制&#xff0c;当按下启动按钮时&#xff0c;信号灯系统开始工作&#xff0c;并周而复始地循环工作&#xff0c;当按下停止按钮时&…

【再学Tensorflow2】TensorFlow2的核心概念

TensorFlow2的核心概念Tensorflow中的张量常量张量变量张量Tensorflow中的计算图计算图介绍静态计算图动态计算图Autograph张量Tensor、图Graph、操作Operation、会话Session模型Model与层LayerTensorflow中的自动微分机制利用梯度磁带求导数利用梯度磁带和优化器求最小值参考资…

ArcGIS基础实验操作100例--实验13 数字化面图形的技巧

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验13 数字化面图形的技巧 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08…

Android 虚拟机 模拟器 设置梯子代理 for Mac

最近需要Android13的环境&#xff0c;想着刷机或者弄个模拟器。 本着效率优先的原则&#xff0c;现在本地机器上搞个Android模拟器。 打开AndroidStudio&#xff0c;在tool菜单 选择avd&#xff0c;安卓虚拟设备 根据本地电脑选择x86架构&#xff0c;MAC os 10.12&#xff0c…

虹科案例 | 监测各种材料液位居然如此轻松?

应用背景 1 天送达标准给公司带来了压力&#xff0c;要求他们比以往任何时候都更快、更高效地处理物品。对于依赖散装材料的行业尤其如此。例如&#xff1a; 农业 建造 塑胶成型 食品加工 许多这些行业通过将材料存放在箱子、罐或筒仓中来处理材料。为了正确地计…

麦克风采样率设置导致视频会议中声音采集异常问题分享

目录 1、问题描述 2、麦克风音频采集频率引发的声音采集异常 3、修改麦克风采集频率的详细说明 4、最后 这几年&#xff0c;大家已经习惯于使用视频会议软件&#xff08;比如免费的腾讯会议软件&#xff09;进行线上沟通与交流&#xff0c;通过摄像头将头像采集发送到会议中…

ARM专用指令

目录 一、状态寄存器传送指令:访问&#xff08;读写&#xff09;CPSR寄存器 ​编辑 二、软中断指令:触发软中断 三、协处理器指令:操控协处理器的指令 四、伪指令: 一、状态寄存器传送指令:访问&#xff08;读写&#xff09;CPSR寄存器 CPSR寄…

多线程的创建和使用(4种)

1.JDK5.0之前的创建方式 方式一&#xff1a;继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run() --> 此线程执行的作声明在run()中 3.创建Thread类的子类的对象 4.通过此对象调用start() 方式二&#xff1a;实现Runnable接口 1.创建一个实现了Runnable…

第三十五章 数论——卡特兰数

第三十五章 数论——卡特兰数一、什么是卡特兰数1、推导2、公式二、卡特兰数的应用1、问题&#xff1a;2、分析3、代码一、什么是卡特兰数 1、推导 我们看下面这个坐标系&#xff1a; 我们从(0,0)(0,0)(0,0)点到(6,6)(6,6)(6,6)点的路线有很多&#xff0c;并且根据我们高中排…

57.return—函数的返回值

57.return-函数的返回值 文章目录57.return-函数的返回值1.定义2.分类3. 没有返回值4.有1个返回值5.有多个返回值6.一个自定义函数只执行一次return语句7.实操练习1.定义 return关键字后接变量名或表达式可以将函数的计算结果返回到调用处。 变量或表达式等同于接收果汁、豆浆…

Chronicle Pro - 一款简单 Mac 理财规划师,管理你的的个人预算

Chronicle Pro - 一款简单 Mac 理财规划师&#xff0c;管理你的的个人预算 使用Chronicle追踪和支付账单&#xff0c;管理你的个人预算&#xff0c;这是一款简单的Mac理财规划师。获得通知&#xff0c;这样你就不会错过下一个付款截止日期;你再也不用付滞纳金了。把你所有的账单…