关于磁盘的随机 IO 和顺序 IO 我的疑问

2018-11-30 11:17:44 +08:00
 luosuosile

最近在设计数据库,了解这些知识所以产生了疑问。 磁盘的随机 IO 定义为磁盘磁头的寻道时间,和光盘的旋转时间。 磁盘的顺序 IO 定义为磁盘进行一次磁头寻道,旋转然后因为数据排列是顺序的,所以只需要进行一次。

那么我的问题就来了,为什么我们对增加了索引,就变成了顺序 io。按道理说,索引不会使得磁盘数据重新排列才是。 还是上面的解释错了?顺序 IO 是大量减少寻道和旋转次数。而随机 IO 是进行大量的寻道和旋转(实际上旋转应该没那么多?因为资源虽然不连续但是位置应该是比较近的)

百思不得其解,所以希望得到指导或者讨论。后续如果得到解答我也会放出来的,谢谢大家。

1593 次点击
所在节点    问与答
2 条回复
JuliaKen
2018-11-30 16:58:33 +08:00
对于你说的 "索引不会使得磁盘数据重新排列才是" ,我对使用索引的理解,是把索引读到内存然后找到符合条件的,磁盘就有了目的可以在顺序 IO 下完成工作。
luosuosile
2018-12-04 09:47:16 +08:00
@JuliaKen 索引好像是在磁盘块里面的,因为索引应该是加在表数据(也可以说是 schema ?)前面(这句话是我按照解释索引的图理解的,但是好像没有明说)。
所以我认为 mysql 是每次读取一页磁盘块,然后扫描磁盘块然后根据里面的表数据索引进行顺序 IO。也就是根据索引移动磁头读取需要的磁盘块。
所以我觉得可能是上面的解释为了解释方便易懂省略了。。当然也可能是我错了。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX