V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
luosuosile
V2EX  ›  问与答

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

  •  
  •   luosuosile · 2018-11-30 11:17:44 +08:00 · 1586 次点击
    这是一个创建于 2210 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    2 条回复    2018-12-04 09:47:16 +08:00
    JuliaKen
        1
    JuliaKen  
       2018-11-30 16:58:33 +08:00 via Android
    对于你说的 "索引不会使得磁盘数据重新排列才是" ,我对使用索引的理解,是把索引读到内存然后找到符合条件的,磁盘就有了目的可以在顺序 IO 下完成工作。
    luosuosile
        2
    luosuosile  
    OP
       2018-12-04 09:47:16 +08:00
    @JuliaKen 索引好像是在磁盘块里面的,因为索引应该是加在表数据(也可以说是 schema ?)前面(这句话是我按照解释索引的图理解的,但是好像没有明说)。
    所以我认为 mysql 是每次读取一页磁盘块,然后扫描磁盘块然后根据里面的表数据索引进行顺序 IO。也就是根据索引移动磁头读取需要的磁盘块。
    所以我觉得可能是上面的解释为了解释方便易懂省略了。。当然也可能是我错了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5721 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:17 · PVG 11:17 · LAX 19:17 · JFK 22:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.