主键自动排序,方便查找
避免链表方式查询,mysql进行了进行了分页,每页存储16KB(InnoDB),并进行页目录(一种数据结构)管理
页目录: 存储 每一页第一个主键的值及其指针(不存储数据)
B B+树的区别
mysql索引的底层实现:
放入数据时,他会基于数据排序,排序之后,数据以量链表的形式以一个指针把数据链接起来,同时mysql在底层为了进一步优化,他是基于B+树的数据结构进行的存储,就是对我们的数据进行了一页一页的去存储,默认每页的大小为16KB,站在整个B+树这种数据结构上讲,,一个三层的B+树结构能存储8亿或者10亿左右的数据。站在两层B+树上来讲,查询时如果基于主键查询,最多动用一次磁盘IO,因为它顶层是常驻内存。
聚簇索引 非聚簇索引
参考:聚簇索引与非聚簇索引(JAVA后端面试知识点) - 知乎
聚簇索引:在表中指的就是主键索引,如果建表是没有建立主键索引,那么它自动生成row_id作为聚簇索引
一个表中只能有一个聚簇索引,其他都是非聚簇索引
索引mssql主键不推荐uuid,int类型的容可以排序,uuid排序困难。
非聚簇索引,记录的是id(主键值),而不是数据地址,因为在 之前的输入1 3 5, 插入数2时,变为1 2 3 5 ,3 5 的在链表地址改变,如果存地址的话,插入的时候还得把非聚簇索引的地址修改一遍,存储主键值,因为主键永远不变,就不用修改(增删改时地址发生变化)
回表、索引覆盖
MySQL 覆盖索引详解 - 掘金
最左匹配
索引下推
原来在server层做的计算现在放到了存储引擎层做了计算,减少了server(电脑管理开启服务那MYSQL57)层和存储引擎层的数据交互,减少了IO操作。