1、索引结构
 索引概念:是帮助mysql高效获取数据的排好序的数据结构
2、MySQL为什么用B+Tree
 为什么不用二叉树,单边增长
 为什么不用红黑树,树的高度不受控制
 为什么不用B-Tree,为了节省空间
 为什么不用Hash表,Hash不支持范围查询
B+Tree结构特点:
 非叶子节点不储存Data,只储存索引(冗余),可以放更多的索引
 叶子节点包含所有索引字段
 叶子节点用指针链接,提高区间访问的性能
 B+Tree结构的特点决定
 因为mysql数据是存在磁盘上的,查询磁盘消耗性能的最大因素就是磁盘IO,为了能减少磁盘IO,就要
 尽量少的操作就能完成查询,B+Tree怎么能满足这个条件呢,他不像二叉树,一个节点只有一个元素,
 B+Tree默认一个节点16kb大小,可以存储多个索引元素,而且只有叶子节点才会存数据,非叶子节点
 只存储索引和指向下一个元素的指针,这样就降低了索引树的高低,减少IO次数
 可以预估一下,B+Tree 3层树高低大概能存多少元素,假设,主键索引用8个字节,指针6个字节,
 一个页默认 16kb
 第一层,可以储存 16kb/(8+6)b = 1170
 第二层,一样 是 1170
 第三层,包括Data,一般一条数据不会超过1kb,就是 16
 三层一共是  1170*1170*16=21902400
3、B-Tree与B+Tree的区别
 B+Tree只有叶子节点存放Data
 B+Tree索引数据做了冗余,非叶子节点存了所有的索引数据
 B+Tree非叶子节点之间有双向指针(B+Tree只有单项指针,mysql优化为双向),而B-Tree没有
4、Mysql主键为什么建议用整型的自增主键
 1、如果表中没有主键,mysql会找到唯一索引列作为主键,如果也没有,会有一个隐藏列作为主键
 2、因为mysql索引是排好序的,如果不是自增主键,mysql会发生页的分裂和重平衡
 3、整型的原因是储存小,索引查询快
5、为什么非主键索引的叶子节点存储的不是Data,而是主键值
 为了保证数据一致性和节省储存空间
6、为什么索引会有最左前缀原则
 因为索引是排好序的结构,如果不遵循最左前缀原则,查询的数据会全表扫描才能查询到所需要的数据