- 博客(8)
- 问答 (1)
- 收藏
- 关注
原创 适合创建索引的场景
而二级索引列对应的id值并一定是连续的,所以这就导致当读取很多id值并不连续的聚簇索引记录时,这些聚簇索引记录分布在不同的页中,页号也是随机的,因此会造成大量的随机I/O。当我们再插入5的记录时,InnoDB会对主键进行判断,发现5没有大于7,所以会将5插入到67前面,但是再插入前还会判断,到底应该放到页0还是页1,放到页1的话,那么需要将67记录往后移动,这个行为称为页分裂。在通过二级索引+回表额度方式执行查询时,某个扫描区间中包含的二级索引记录数量越多,就会导致回表操作的代价越大。
2024-07-24 17:57:12
496
原创 InnoDB索引底层原理
先用二分法在最上层的“存储目录项页”中定位该主键值在哪个“目录项页”中,确定在哪个“目录项页”中时,再去对应的中间层的“目录项页”中,继续用二分法进行查询,直到确定出该主键值在最末层的哪个记录页中,在该记录页中依旧通过二分法对页目录(槽)进行定位,直至确定在哪一组中,最后在组中依次对比主键值即可。也讲这些页成为B+树的节点。上面说过,每创建一个索引,就会创建出一棵对应的B+树,二级索引也是,与聚簇索引的区别就是,列值不再是主键,,所以通过二级索引的B+树查询的话,最终需要一个“回表”的操作。
2024-07-22 21:20:45
1167
原创 InnoDB索引页的整体结构
InnoDB对分组的规定是,对于Infimum记录所在的分组只能有1条记录,Supremum记录所在的分组拥有的记录条数只能在1~8条之间,剩下的分组中记录的条数范围只能是4 ~ 8条之间。之后每插入一条记录,都会从page Directory页目录中找到对应记录的主键值比带插入记录的主键值大并且差值最小的槽(槽是一个组内最大的那条记录在页面中的地址偏移量,通过槽可以快速找到对应的记录的主键值),然后把该槽对应的记录的n_owned值加1,表示本组内又添加一条记录,直到该组中的记录数等于8个。
2024-07-20 11:58:57
664
空空如也
sqlserver数据库速去数据问题
2016-08-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人