网站首页 > java教程 正文
数据页分裂的过程,在你不停往表里灌入数据时,会搞出来一个个数据页,若你的主键非自增,他可能会有一个数据行挪动过程,保证你下一个数据页的主键值都大于上一个数据页的主键值。
假设有多个数据页,然后根据主键查询数据,直接查询是不行的,因为不知道主键到底在哪
若你要查id=4的数据,你咋知它在哪个数据页嘞?所以如果还是这样子,你就只能全表扫描,从第一个数据页开始,每个数据页都进入到页目录里查找主键,最坏情况下,所有数据页你都得扫描一遍,贼坑。
对此,就得针对主键设计个索引,针对主键的索引实际上就是主键目录:把每个数据页的页号,还有数据页里最小的主键值放在一起,组成一个索引的目录
有了上图的主键目录就好多了,直接到主键目录搜索id=3的数据,此时就会和每个数据页的最小主键来比,首先id=3大于了数据页2里的最小主键值1,接着小于了数据页8里的最小主键值4。于是就可定位到id=3的数据一定在数据页2。
假设有很多数据页,在主键目录里就会有很多数据页和最小主键值,此时完全可二分查找待查询id在哪个数据页。
所以这效率很高,类似上图的主键目录就能认为是主键索引。
数据页都是一坨坨连续数据,放在很多磁盘文件,所以只要你能根据主键索引定位到数据所在的数据页,此时假设我们有别的方式存储了数据页跟磁盘文件的对应关系,此时你就可以找到一个磁盘文件。
假设数据页在磁盘文件里的位置也就是offset偏移量,你也能知道,此时就能直接通过随机读定位到磁盘文件的某个offset偏移量位置,然后就能读取连续的一大坨数据页。
猜你喜欢
- 2025-09-19 Java动态规划详解与实战_java中的动态规划
- 2025-09-19 Java学习总结 2020/4/20_学java课程的心得体会和收获
- 2025-09-19 MySQL索引原理以及查询优化_mysql索引是干嘛的
- 2025-09-19 Github史上最大开源算法库:The Algorithms
- 2025-09-19 Kafka作为消息系统的系统补充_kafka如何保证消息的可靠性
- 2025-09-19 字节跳动Java岗4面面经分享:JVM+索引+Redis +手撕算法+CAS
- 2025-09-19 Java中java.util.Arrays参考指南_java arrayutils
- 2025-09-19 为什么索引可以让查询变快?终于有人说清楚了
- 2025-09-19 斐波那契查找算法_斐波那契查找算法的意义
- 2025-09-19 深入剖析 Java HashMap 如何解决 Hash 冲突
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)