Mysql 索引原理及优化
什么是索引
为什么需要索引?
索引是数据表种一个或者多个列进行排序的数据结构
索引能够大幅提升检索速度
创建、更新索引本身也会耗费空间和时间
查找结构进化史
线性查找:一个个找;实现简单;太慢
二分查找:有序;简单;要求是有序的,插入特别慢
HASH查找:查询快;占用空间;不太适合存储大规模数据
二叉查找树:插入和查询很快(log(n));无法存大规模数据,复杂度退化
平衡树:解决 BST 退化问题,树是平衡的;节点非常多的时候,依然树高很高
多路查找树:一个父亲多个孩子节点(度);节点过多树高不会特别深
多路平衡查找树:B-Tree
这个网站关于数据结构的演示很直观,我们可以通过其中的动画来学习。
比如二叉查找树退化问题:
可以明显看到,由于我们输入的数字是顺序增长的,二叉查找树变成了单边增长的线性结构,这就是复杂度退化。
平衡树(AVL)则没有这个问题: