索引介绍
B Tree
B+ Tree
LSM Tree
Merge Tree(是clickhouse的类LSM树)
B和B+树介绍:https://www.sidney.wiki/db/1526
大多数mysql采用B+树,大多数nosql(如clickhouse、Cassandra)采用lsm树,为什么要使用lsm树:
https://www.bilibili.com/video/BV18A411B7YY/?spm_id_from=333.337.search-card.all.click&vd_source=0404d052110f319caf00323d54512b50
LSM对写入进行了优化,而B+适合读取但不适合写入
LSM树
https://anyview.fun/2022/09/23/%E4%B8%80%E6%96%87%E4%BA%86%E8%A7%A3lsm-tree/
sstable 是类AVL的排序树,有多个level的机制
另外还可以扩展用MemTable(跳表,也可以是红黑树)
PS:布隆过滤器的扩展(LSM每一个层级都可以有一个布隆过滤器,还用来确定数据不在这个层级里)
https://www.sidney.wiki/db/1534
各数据库的索引
1.mysql索引
mysql存储引擎(myisam、innodb)
https://www.cnblogs.com/izyh/p/15211081.html
聚集索引,主键的索引,非主键的索引
以innodb为例介绍:
mysql索引基础介绍:
https://juejin.cn/post/6931901822231642125
mysql联合索引:
https://blog.csdn.net/weixin_38192427/article/details/120244367
mysql索引使用:
https://www.cnblogs.com/zsql/p/13808417.html#_label1_2
2.es索引
https://blog.csdn.net/qq_40675243/article/details/123417222
ES中使用的是倒排索引,Mysql中的是正排索引
3.Cassandra索引
4.clickhouse索引
https://zhuanlan.zhihu.com/p/588458902
文章里讲述了clickhouse的存储结构(列存储每列一个文件,从小到大:一列的每一行–>压缩颗粒–>压缩文件块–>一个partition的下的有各列完整文件–>整个结构由多个partition组成),一二级索引,联合主键,压缩颗粒,顺序如何影响压缩比
一级索引:列排序(LSM),在查找时二分 + MergeTree
二级索引:跳数索引minmax、布隆过滤器等
另外clickhouse为什么写入快:批量写入与后台合并