最近回头看了一下《mysql从入门到放弃》这本书,专门看了看我们经常使用的innodb引擎,现在记录一下学习的内容吧。
有错误请指正。
Mysql5.5后默认引擎为innodb
innodb特性
innodb支持事务,支持行锁,支持外键。是一个专门为大容量存储设计的存储引擎。默认索引b+tree。
关于事务,可以参照:mysql 事务ACID
关于行锁,可以参照: mysql 行锁
B-tree
关于B-tree这里先简述一下,后续有空补上关于b-tree 和b+tree的内容。
B-tree是一种专门为外部存储设备设计平衡多路查找树。磁盘存储是分磁盘块的,每个块存储他的主键还有data,b-tree将数据排序,然后再数据前后分别有指针指向小于, 等于,大于他的数据所在磁盘块。这样在尽量少的IO次数下,通过二分查找,快速定位所需数据。
Mysql使用的b+tree是在b-tree基础上改进的,将所有数据放在同一个叶节点上,减少查找树的高度,更多减少磁盘IO次数。
所以这也就是为什么mysql主键推荐使用自增。因为他的主键(聚集索引)在物理上连续,这样在查找数据是,通过B+tree减少排序带来的性能影响。并且主键较小,也减少了磁盘的占用空间。
关于主键选择自增,UUID还是雪花算法,回来再专门开一个博客写吧。