记住满元素中间元素向上裂变就行了
因为如果是5个节点,比第一个节点小的算一个指针,逼最后一个节点大的算一个指针,里面是4个指针
所有元素都会出现在叶子节点并且诸多叶子节点通过指针构造一张单项链表
看我:除了最下面节点,上面的节点(叶子空间最大16k)全部放满内存可以放1171个指针(存放指向其他节点的地址)和1170个键值,2级高度(相当于一个叶子节点下面可以有1171个叶子节点)就是1171
主键个数 * 主键字节数 + 指针数量 * 6个字节 = 16kb(每页占16kb,每区占1MB)
这个例子意思是:一页可以有1171个指针,一页可以有16行的1k数据
索引的作用
索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度,这也是创建索引的最主要的原因。
索引可以帮助服务器避免排序和创建临时表
索引可以将随机IO变成顺序IO
索引对于InnoDB(对索引支持行级锁)非常重要,因为它可以让查询锁更少的元组,提高了表访问并发性
关于InnoDB、索引和锁:InnoDB在二级索引上使用共享锁(读锁),但访问主键索引需要排他锁(写锁)
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能
缺点
创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
对表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度 如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
对于非常小的表,大部分情况下简单的全表扫描更高效;
最左前缀法则:第一个在MySQL语句当中where后面出现的第一个索引,即为最左索引,要两个以上即可建立成功(要先写联合索引,才能构建最左)
说明两个索引也可创建联合索引