简介
密集索引 与 稀疏索引的介绍
1. 密集索引:在密集索引中,数据库中每个键值都有一个索引记录,可以加快搜索速度,但需要更多空间来存储这些索引本身,索引记录包含键值 和 指向磁头上实际记录的指针
2. 稀疏索引:稀疏索引不会为每个关键字创建一个索引记录,而是为数据记录文件的每个存储块设置一个键-指针对。存储块意味着【块内存储单元连续】
案例
1. Mysql的MYISAM引擎里面使用的均为稀疏索引
2. Mysql的InnoDB中,如果存在主键,则主键是密集索引
3. Kafka里面的索引文件也是采用稀疏索引进行构造消息索引
4. Clickhouse的合并树MergeTree引擎使用的是稀疏索引,默认index_granularity设置8192新版本的提供了
自适应粒度大小的特性,8192含义就是每8192为一个数据存储块,公用1个索引,如果想找具体数据,需要从
8192个数据中进行二次寻址,找到指定数据。
建表语句最后加这个,可以调整
SETTINGS index_granularity = 8192
总结
1. Clickhouse的一级索引,就是稀疏索引,可以大幅减少索引占据的空间
(1). 默认索引粒度是8192, 即每个存储块8192数据量公用1个索引。假如1亿行数据只需要存储12208行索引,
占用空间小,clickhouse中一级索引的数据是【常驻内存】的,取用速度极快
2. 密集索引占用空间多,所以性能比稀疏索引块,缺点就是耗费更多空间
3. 思想依然是:时间与空间之间的抉择
4. 稀疏索引需要进行二次寻址,因为索引指向的是一个存储块,找到具体数据,需要从存储块中进行二次寻址,
所以性能不如密集索引