美文网首页
Doris系列7-Doris之前缀索引

Doris系列7-Doris之前缀索引

作者: 只是甲 | 来源:发表于2022-01-06 09:30 被阅读0次

一. 前缀索引概述

  不同于传统的数据库设计,Doris 不支持在任意列上创建索引。Doris 这类 MPP 架构的 OLAP 数据库,通常都是通过提高并发,来处理大量数据的。

  本质上,Doris 的数据存储在类似 SSTable(Sorted String Table)的数据结构中。该结构是一种有序的数据结构,可以按照指定的列进行排序存储。在这种数据结构上,以排序列作为条件进行查找,会非常的高效。

  在 Aggregate、Uniq 和 Duplicate 三种数据模型中。底层的数据存储,是按照各自建表语句中,AGGREGATE KEY、UNIQ KEY 和 DUPLICATE KEY 中指定的列进行排序存储的。

  而前缀索引,即在排序的基础上,实现的一种根据给定前缀列,快速查询数据的索引方式。

  我们将一行数据的前 36 个字节 作为这行数据的前缀索引。当遇到 VARCHAR 类型时,前缀索引会直接截断。

案例1:
以下表结构的前缀索引为 user_id(8Byte) + age(4Bytes) + message(prefix 20 Bytes)

image.png

案例2:
以下表结构的前缀索引为 user_name(20 Bytes)。即使没有达到 36 个字节,因为遇到 VARCHAR,所以直接截断,不再往后继续。

image.png

当我们的查询条件,是前缀索引的前缀时,可以极大的加快查询速度。比如在第一个例子中,我们执行如下查询:

SELECT * FROM table WHERE user_id=1829239 and age=20;

该查询的效率会远高于如下查询:

SELECT * FROM table WHERE age=20;

所以在建表时,正确的选择列顺序,能够极大地提高查询效率

二. ROLLUP 调整前缀索引

  因为建表时已经指定了列顺序,所以一个表只有一种前缀索引。这对于使用其他不能命中前缀索引的列作为条件进行的查询来说,效率上可能无法满足需求。因此,我们可以通过创建 ROLLUP 来人为的调整列顺序。

Base 表结构如下:

image.png

我们可以在此基础上创建一个 ROLLUP 表:

image.png

可以看到,ROLLUP 和 Base 表的列完全一样,只是将 user_id 和 age 的顺序调换了。那么当我们进行如下查询时:

SELECT * FROM table where age=20 and message LIKE "%error%";

会优先选择 ROLLUP 表,因为 ROLLUP 的前缀索引匹配度更高。

参考:

  1. https://doris.apache.org/master/zh-CN/getting-started/data-model-rollup.html#rollup

相关文章

  • Doris系列7-Doris之前缀索引

    一. 前缀索引概述   不同于传统的数据库设计,Doris 不支持在任意列上创建索引。Doris 这类 MPP 架...

  • ClickHouse系列7-Doris Hive Spark C

    一.测试环境准备 测试环境:Doris 4台虚拟机,4核8G 150GB普通磁...

  • Doris系列15- 索引

    一. 索引概述 目前Doris只支持bitmap 索引BITMAP 索引仅在单列上创建 bitmap index:...

  • MySQL索引机制(详细+原理+解析)

    一.索引的类型与常见的操作 前缀索引 MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也...

  • 前缀索引,中看也中用!

    @[toc]最近几篇文章,都是在和大家聊索引的问题,今天我们来看看前缀索引。 1.什么是前缀索引 所谓前缀索引说白...

  • MySQL实战 | 11 怎么给字符串字段加索引?

    两种: 全字段索引 前缀索引 举例: 可以对 email 字段创建全字段索引,或者前缀索引。 区别 1、全字段索引...

  • mysql笔记

    前缀索引:使用字段的部分前缀做为索引,可以有效减少索引的长度 1)、创建索引 alter table testdb...

  • Mysql

    索引(一般监控到慢SQL,才会建索引) 前缀索引 常见索引误区 多列联合索引 左前缀例子(是一种联合索引的匹配规则...

  • Mysql前缀索引长度确定方法

    MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也有它的坏处:MySQL 不能在 ORD...

  • 高性能的索引策略【高性能mysql第三版笔记】

    1. where右边使用独立的列 2. 前缀索引和索引选择性 前缀索引:索引最开始的部分字符,可以大大节约索引空间...

网友评论

      本文标题:Doris系列7-Doris之前缀索引

      本文链接:https://www.haomeiwen.com/subject/cjmtfrtx.html