知识点整理-mysql的顺序I/O和随机I/O
2024-08-31 22:09:19
假设有这样一张表:
CREATE TABLE `person_info` (
`id` int() NOT NULL AUTO_INCREMENT,
`name` varchar() NOT NULL,
`birthday` date NOT NULL,
`phone_number` char() NOT NULL,
`country` varchar() NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_name_birthday_phone_number` (`name`,`birthday`,`phone_number`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=latin1
其中,有个二级索引`idx_name_birthday_phone_number` (`name`,`birthday`,`phone_number`)
假设有这样3条数据:
我们在进行范围查找的时候,如
SELECT *
FROM person_info
WHERE name > 'Ashburn' AND name < 'Ashburn3'
由于索引idx_name_birthday_phone_number对应的B+树中的 记录首先会按照name列的值进行排序,所以值在Ashburn~Ashbur3之间 的记录在磁盘中的存储是相连的,集中分布在一个或几个数据⻚中, 我们可以很快的把这些连着的记录从磁盘中读出来,这种读取方式我 们也可以称为顺序I/O。根据第1步中获取到的记录的id字段的值可 能并不相连,而在聚簇索引中记录是根据id(也就是主键)的顺序 排列的,所以根据这些并不连续的id值到聚簇索引中访问完整的用 户记录可能分布在不同的数据⻚中,这样读取完整的用户记录可能要 访问更多的数据⻚,这种读取方式我们也可以称为随机I/O。一般情 况下,顺序I/O比随机I/O的性能高很多,所以步骤1的执行可能很 快,而步骤2就慢一些。
最新文章
- Canvas绘制时钟
- 控制对话框风格的activity的显示大小与位置
- 解决Yii2 启用_csrf验证后POST数据仍提示“您提交的数据无法验证”
- CSS的盒子模型
- thinkphp关联模型的用法
- CodeForces - 427B (模拟题)
- phantomjs使用说明
- 关于标准C语言的预定义宏
- Swift语言指南(三)--语言基础之整数和浮点数
- ModelDriven
- WIn7下Ubuntu 14.04 安装
- leetcode——262. Trips and Users
- Centos6.7的在虚拟机virulBox下的lamp平台的搭建
- SQLite数据库中多线程使用问题
- css文件引人的三种方式
- 20145232韩文浩《网络对抗》逆向及BOF基础实践
- 【原】本地仓库推送到远程仓库:fatal: refusing to merge unrelated histories
- Android视频压缩
- java.lang.NoClassDefFoundError: javax/servlet/AsyncListener解决方案
- laravel中的DB facade实现数据的CURD