建立联合索引a,b
,可以看到a
的值是有序的,b
是无序
由于a
的值是有序的,可以能通过二分查找
去查询数据
#用到索引
EXPLAIN SELECT * where a=1 and b=1 from test
由于b
的值是无序的,可以不能通过二分查找
去查询数据
#用不到索引
EXPLAIN SELECT * where b=1 from test
所以为什么要遵循最前缀法则了
#and b =1用不到索引
EXPLAIN SELECT * where a>1 and b =1
#用到索引
EXPLAIN SELECT * where a=1 and b =1
#用到索引
EXPLAIN SELECT * where a like "1%"
#用不到索引
EXPLAIN SELECT * where a like "%1%"
b-tree
b-tree存在回旋查找的问题,比如查找大于5的数,我先定位到这个5,定位到这个5之后我再回头去查找6,然后再查找7,然后再查找8然后再查找9,最后查找10
b+tree
非叶子结点
他们只存储这个 key,他们不存储这个 value
叶子结点
即存key又存这个value
b+tree和B树有明显的区别
b+tree 彻底解决回旋查找的问题,这里是一个叶子节点,其实他这里是一个链表,他把你所有的数进行了链表的排序,从小到大的排序,他通过单向链表解决回旋查找的问题