最近在设计数据库,了解这些知识所以产生了疑问。 磁盘的随机 IO 定义为磁盘磁头的寻道时间,和光盘的旋转时间。 磁盘的顺序 IO 定义为磁盘进行一次磁头寻道,旋转然后因为数据排列是顺序的,所以只需要进行一次。
那么我的问题就来了,为什么我们对增加了索引,就变成了顺序 io。按道理说,索引不会使得磁盘数据重新排列才是。 还是上面的解释错了?顺序 IO 是大量减少寻道和旋转次数。而随机 IO 是进行大量的寻道和旋转(实际上旋转应该没那么多?因为资源虽然不连续但是位置应该是比较近的)
百思不得其解,所以希望得到指导或者讨论。后续如果得到解答我也会放出来的,谢谢大家。
1
JuliaKen 2018-11-30 16:58:33 +08:00 via Android
对于你说的 "索引不会使得磁盘数据重新排列才是" ,我对使用索引的理解,是把索引读到内存然后找到符合条件的,磁盘就有了目的可以在顺序 IO 下完成工作。
|
2
luosuosile OP @JuliaKen 索引好像是在磁盘块里面的,因为索引应该是加在表数据(也可以说是 schema ?)前面(这句话是我按照解释索引的图理解的,但是好像没有明说)。
所以我认为 mysql 是每次读取一页磁盘块,然后扫描磁盘块然后根据里面的表数据索引进行顺序 IO。也就是根据索引移动磁头读取需要的磁盘块。 所以我觉得可能是上面的解释为了解释方便易懂省略了。。当然也可能是我错了。。 |