索引
-----记录最近学习有关索引的一些知识
一.名词
1.主键索引:唯一索引,建表时就指定了主键索引,叶子节点存放的是整行数据;
2.非主键索引:二级索引。叶子节点存放主键的值;
3. 联合索引:两个字段以上组合的索引;
4.聚簇索引:将索引与表数据存储到同一个文件中,例:InnoDB存储引擎;
5.非聚簇索引:索引与表数据放在了两个文件中,比如Myisam存储引擎;
6.hash索引:对索引key进行hash运算得出数据的存储位置,适合”=“,”in“查询,不支持范围查询;
7.索引:一种有序的数据结构。
二.问题总结
1.B+树索引与B-树的区别
1)B+树的叶子节点包含了所有的索引数据,而B-树只是包含了一部分索引;
2)B+树的叶子节点有双向指针,B-树的叶子节点不包含指针;
3)B-树的每个节点都包含data信息,也就是索引在磁盘上的位置,B+树只有叶子节点包含data信息。
2.联合索引为什么要遵循最左前缀原则?
联合索引是按照第一个索引进行排序的,只有在第一个索引是有序的同时,才对第二个索引进行排序,依次类推。
3.创建主键的原因?
在InnoDB中是通过B+树将聚集索引与数据组织起来的,如果不创建主键,MySQL会自动选没有重复数据的列作为主键,这样将创建主键的事情交给MySQL,会影响性能。
4.选择自增主键的原因?
这样会减少B+树创建时的插入与分裂,效率低。