Mysql索引使用的是B+树,因为索引是用来加快查询的,而B+树通过对数据进行排序所以是可以提高查询速度的,然后通过一个节点中可以存储多个元素,从而可以使得B+树的高度不会太高,在Mysql中一个Innodb页就是一个B+树节点,一个Innodb页默认16kb,所以一般情况下一颗两层的B+树可以存2000万行左右的数据,然后通过利用B+树叶子节点存储了所有数据并且进行了排序,并且叶子节点之间有指针,可以很好的支持全表扫描,范围查找等SQL语句。
二叉树 当插入的数据id递增时 ,变成了链表,查询的时间与全表扫描一样,不推荐
红黑树 当插入的数据id递增时,会进行树的旋转。是个二叉平衡树。但数据数量一多的时候树的高度还是太多了
既然要高度小一点,那就将它变为多叉树!!B-Tree
3高度的树能放2千万行数据。
一般来说,非叶子节点(也就是索引)一开始就在内存中,所以其实查询的时候只需要一次 I/O,就可以查出数据了。
ps :存储引擎是表级别的,不同的表可以选择 不同的存储引擎
myisam B+树的叶子节点放的是这行数据的磁盘文件地址
frm:表结构
MYD:data行记录数据
MYI:index 索引
由于它的存储结构,他的索引和data数据是分开存储的,所以他是非聚集索引
innoDB B+树的叶子节点放的是这行数据的数据
frm:表结构
ibd: 索引+数据
由于它的存储结构,他的索引和data数据是一起存储的,所以他是聚集索引
从存储结构上来说,聚集索引的查询效率更高!
联合索引,按照索引的先后列的顺序进行排序(a,b,c)先按a列进行排序,如果a能区分就不看bc列,如果a列相同,就按b列排序。每一列中,字符串每一位进行比较。