数据库索引是一种数据结构文爱 电报群,用于对数据库表中的一列或多列的值进行排序,以便快速访谒表中的特定信息。索引的主要主义是加速检索表中数据的速率,提高系统的性能。不错将其类比为一册书的目次,通过目次不错快速定位到书中的特定则节,而无需逐页翻阅。
索引通过调度一个有序的数据结构(如B树、哈希表等),使得数据库系统大约在查询时快速定位到所需的数据行。在创建索引时,数据库系统会为索引列创建一个异常的数据结构,该结构包含了指向本体数据行的指针。当奉行查询操作时,数据库系统治先会在索引中查找匹配的记载,然后通过指针快速定位到本体的数据行。
数据库索引的类型
从加速的查询和旨趣来看,Apache Doris 的索引分为点查索引和跳数索引两大类。
点查索引:常用于加速点查,旨趣是通过索引定位到舒服 WHERE 条目的有哪些行,径直读取那些行。点查索引在舒服条目的行比拟少时后果很好。Apache Doris 的点查索引包括前缀索引和倒排索引:
1、前缀索引:Apache Doris 按照排序键以有序的模样存储数据,并每隔 1024 行数据创建一个稀少前缀索引。索引中的 Key 是现时 1024 行中第一排中排序列的值。要是查询波及已排序列,系统将找到关系 1024 行组的第一排并从那边开动扫描。
2、倒排索引:对创建了倒排索引的列,设置每个值到对应行号市欢的倒排表。关于等值查询,先从倒排表中查到行号市欢,然后径直读取对应行的数据,而毋庸逐行扫描匹配数据,从而减少 I/O 加速查询。倒排索引还能加速范围过滤、文本要津词匹配,算法愈加复杂然而基答应趣相同。(备注:之前的 BITMAP 索引仍是被更强的倒排索引取代)
跳数索引:常用于加速分析,旨趣是通过索引细则不舒服 WHERE 条目的数据块,跳过这些不舒服条目的数据块,只读取可能舒服条目的数据块并再进行一次逐行过滤,最终获得舒服条目的行。跳数索引在舒服条目的行比拟多时后果较好。Apache Doris 的跳数索引包括 ZoneMap 索引、BloomFilter 索引、NGram BloomFilter 索引:
1、ZoneMap 索引:自动调度每一列的统计信息,为每一个数据文献(Segment)和数据块(Page)记载最大值、最小值、是否有 NULL。关于等值查询、范围查询、IS NULL,不错通过最大值、最小值、是否有 NULL 来判断数据文献和数据块是否不错包含舒服条目的数据,要是莫得则跳过不读对应的文献或数据块减少 I/O 加速查询。
2、BloomFilter 索引:将索引对应列的可能取值存入 BloomFilter 数据结构中,它不错快速判断一个值是否在 BloomFilter 内部,况兼 BloomFilter 存储空间占用很低。关于等值查询,要是判断这个值不在 BloomFilter 内部,就不错跳过对应的数据文献或者数据块减少 I/O 加速查询。
3、NGram BloomFilter 索引:用于加速文本 LIKE 查询,基答应趣与 BloomFilter 索引相同,仅仅存入 BloomFilter 的不是原始文本的值,而是对文本进行 NGram 分词,每个词看成值存入 BloomFilter。关于 LIKE 查询,将 LIKE 的 pattern 也进行 NGram 分词,判断每个词是否在 BloomFilter 中,要是某个词不在则对应的数据文献或者数据块就不舒服 LIKE 条目,不错跳过这部分数据减少 I/O 加速查询。
各式类型索引特质对比
倒排索引是什么
倒排索引,是信息检索界限常用的索引时期,将文天职红一个个词,构建 词 -> 文档编号 的索引,不错快速查找一个词在哪些文档出现。
萝莉 崩坏:星穹铁道从 2.0.0 版块开动,Doris 救助倒排索引,不错用来进行文本类型的全文检索、鄙俚数值日历类型的等值范围查询,快速从海量数据中过滤出舒服条目的行。
在 Doris 的倒排索引杀青中,Table 的一排对应一个文档、一列对应文档中的一个字段,因此诓骗倒排索引不错阐发要津词快速定位包含它的行,达到 WHERE 子句加速的主义。
与 Doris 中其他索引不同的是,在存储层倒排索引使用孤立的文献,跟数据文献逐个双应、但物理存储上文献互相孤立。这么的克己是不错作念到创建、删除索引毋庸重写数据文献,大幅裁汰处置支出。
倒排索引案例共享:
倒排索引在数据仓库应用案例搜检:
从 Elasticsearch 到 SelectDB,不雅测云杀青日记存储与分析的 10 倍性价比擢升(https://www.selectdb.com/blog/122)
#倒排索引#文爱 电报群