Mysql索引优化和底层数据结构分析

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 数据结构可视化测试网站
1.慢sql优化—>看看是不是走了索引,比如千万级别的数据加索引效果非常好。
2.索引是帮助mysql高效获取数据排好序的数据结构
索引数据结构:
二叉树
红黑树
hash表(如果等值查询确实快,如果where col>7这样就不行了)
B-Tree
mysql索引底层默认是B+Tree(B加树)不是B-Tree(B树)不是二叉树,因为二叉树右面必须大于小于父节点,左边小于等于父节点。如果数据是递增有序的,则此时退化程了链表,所以二叉树有时会不满足业务情况
红黑树(二叉平衡树)也有点问题–查找次数少了,树的高度不断增长,随着表行数增加几百万行,红黑树高度一直增长不可控制,比如要查找红黑树20此查找才能找到,此时要20次IO操作,性能很低。
B-Tree (B树,多叉平衡树,叶子节点没有指针)对红黑树进行改造,叶节点具有相同蛇毒 叶节点的指针为空 所有索引元素不重复 节点种的数据索引从左到右递增排列,目的是让树的高度(2-4最合适)降低。
SHOW GLOBAL STATUS LIKE ‘Innodb_page_size’;–> variable_name value
Innodb_page_size 16384
B+Tree(mysql索引默认的结构,对B-Tree的改造,多叉平衡树,叶子节点有指针)
B+Tree特性:
1.非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
2.叶子节点包含索引字段
3.叶子节点用指针链接,提高区间访问性能
相对于B-Tree,把data都挪到了叶子节点,非叶子节点没有任何元素,没个data代表了所在的行。如图
Mysql索引优化和底层数据结构分析
h=3时候B+Tree大概能放2千多万索引元素
Mysql索引优化和底层数据结构分析
Mysql索引优化和底层数据结构分析
innodb存储引擎的表只有两个文件.frm和.ibd两个文件

架构师技术框架脑图
https://www.processon.com/view/link/5cb6c8a4e4b059e209fbf369#map