TIP
Hash和B+树索引
指的是索引的实现方式
# Hash索引
1、Hash索引的原理跟java的HashMap差不多
2、比如说把username列当索引了,'zhangsan' 通过Mysql的hash算法计算成一个hash值
3、hash值和行地址就可以当一个非聚集索引了
4、Hash索引可以用于精确查找,例如'='、’in'、'<=>',但是没办法范围查找和排序
5、因为可能存在Hash碰撞的原因,所以每插入一条新数据,就得把索引中已有的Hash值遍历一遍
6、适用于给一些业务ID加这个索引,因为通常业务ID都是够长的,不容易产生Hash碰撞,并且精确查询的场合较多
# B+树索引
1、二叉树做索引容易不平衡,变成一个链表,平衡二叉树和红黑树又容易太高,增加IO次数,B-树虽然又平衡又控制高度,但是B+树分配的更均匀(根节点元素在子节点是最大值)只在叶子节点存放数据,并且叶子间有指针,适合范围查询
2、因为每次插入新数据时,B+树索引都要重新调整结构,而采用自增主键做B+树索引,则B+树每次的调整改动是最小的,添加到最后面就行
# InnoDB、MyISAM的B+树索引
1、InnoDB这个引擎是在建表时必须得强制来一个B+树的聚集索引的,所以它的叶子节点不光是带索引的键值,还会把同行的数据也带上,如果你没指定主键,Mysql就会找该表的第一个唯一非空索引被作为聚集索引,如果还没有,就拿一个类似隐藏的RowID做聚集索引
2、MyISAM就不同了,它的叶子节点是带索引的键值和对应的行地址