索引
索引的数据结构大多是B+树的,不是键值对结构,在非叶子节点存索引列的值,而在叶子节点存要找的数据,
B树是key-value结构,可以在树中直接找到对应的值,这样更适合随机读取
而B+树是B树的改进,不使用key-value结构,而是非叶子节点只存索引列,而叶子节点顺序存储数据,并把叶子节点用指针串联起来,这样非叶子节点能存的索引值更多,且因为是顺序的更适合顺序读取,比如范围查询,可以看出它相比B树在随机读取方面可能会差点,因为B+树只有到叶子节点才能命中数据,而nosql的mongoDB就是用B树作为索引的
聚簇索引
非聚簇索引是MyISAM相对InnoDB而言的,InnoDB数据和索引放在同一个文件中,MyISAM不是
Innodb的索引储存是聚簇索引,而MyISAM中是非聚簇索引,容易弄混的是InnoDB里的不叫非聚簇索引而是叫辅助索引树,网上好像都没区分太开
在数据库原理这本书里聚簇索引定义是物理列顺序和键排序顺序一样
哈希索引
在memory和heap引擎中才有哈希索引,heap下默认为哈希索引,哈希索引常用来join连接操作
而InnoDB中是自适应哈希,Innodb存储引擎里,会监控对表上二级索引(这个二级索引是什么呢)的查找,如果发现某二级索引被频繁访问,二级索引成为热数据,就利用buffer pool为之建立hash索引
自适应哈希索引通过缓冲池的B+树构造而来(怎么搞的啊),因此建立的速度很快。缺点是hash自适应索引会占用innodb buffer pool;(是什么啊)
参考资料
- https://www.nowcoder.com/discuss/445575
- https://blog.youkuaiyun.com/u013132035/article/details/82193763聚簇索引,看评论
- https://zhuanlan.zhihu.com/p/110475671自适应哈希
- https://www.cnblogs.com/geaozhang/p/7252389.html自适应哈希的图
- https://www.jb51.net/article/109815.htm
TODO
- InnoDB的索引树为什么增删不会碎片,而MyISAM就会?
- 错误日志、查询日志、慢查询日志、事务日志、二进制日志、中继日志
- 存储过程是什么
- innodb和myisam设计为了什么场景
- myisam损坏不能删除,算是破坏了持久性吗
乐观锁的CAS- 左连接,右连接,内连接熟练
- https://zhuanlan.zhihu.com/p/115746492