关系型非关系型数据库索引对比一览

257 阅读2分钟

数据库关系型和非关系型; 关系型分为行式和列式。非关系型又分为键值、文档、列族、图数据库; 为什么出现索引? 索引做了什么?

mysql 索引案例:juejin.cn/post/716902… 查询优化器这个东西很神秘 聚集索引、非聚集索引 主键索引、唯一索引、普通覆盖索引、联合索引 联合索引底层实现: juejin.cn/post/684490…

doris: 自动:前缀索引, 36 个字节 作为这行数据的前缀索引。当遇到 VARCHAR 类型时,前缀索引会直接截断 zoneMap索引Zone :Map索引是在列存格式上,对每一列自动维护的索引信息,包括Min/Max,Null值个数等等。 手动:用户手动创建的二级索引,包括  [倒排索引]  [bloomfilter索引]  BF索引也是以Block为粒度创建的。每个Block中,指定列的值作为一个集合生成一个BF索引条目,用于在查询是快速过滤不满足条件的数据。 [ngram bloomfilter索引]  在Bloom filter设置之前需要一个额外的参数,即要索引的ngram的大小。一个ngram是长度为n的任何字符串,比如如果n是4,A short string会被分割为A sh`` shoshorhortort sor str strstritrinring。这个索引对于文本搜索也很有用 [bitmap索引] bitmap精准去重,设计优化。 doris.apache.org/zh-CN/docs/…

clickhouse: 索引官方文档 : clickhouse.com/docs/zh/gui…

跳数索引:本质还是利用max,min,set,Bloom Filter Types这种能够缩小查询范围的

布隆过滤器由一个BitMap组成。所谓的BitMap,本质上就是一个数组。与寻常数组不同的是,BitMap一个数组元素占一个bit,这一特性决定了BitMap能够极大地节省空间

hbase: 块索引是HBase固有的一个特性,因为HBase的底层数据是存储在HFile中的,而每个HFile中存储的是有序的<key, value>键值对,HFile文件内部由连续的块组成,每个块中存储的第一行数据的行键组成了这个文件的块索引,这些块索引信息存储在文件尾部。当HBase打开一个HFile时,块索引信息会优先加载到内存;HBase首先在内存的块索引中进行二分查找,确定可能包含给定键的块,然后读取磁盘块找到实际想要的键。

块索引能帮助我们更快地在一个文件中找到想要的数据,但是我们可能依然需要扫描很多文件。而布隆过滤器就是为解决这个问题而生。因为布隆过滤器的作用是,用户可以立即判断一个文件是否包含特定的行键,从而帮我们过滤掉一些不需要扫描的文件

ROW 行键使用布隆过滤器 ROWCOL 列键使用布隆过滤器