索引是如何将随机 I/O 转换为顺序 I/O 的?

索引是如何将随机 I/O 转换为顺序 I/O 的?

索引如何将随机 I/O 转变为顺序 I/O

在《高性能 mysql》一书中提到,使用索引可以将随机 I/O 变成顺序 I/O,但这让人困惑,因为如果不走索引,全表扫描也是顺序 I/O。

理解磁盘存储

首先要理解数据在磁盘上的存储方式。原始数据在磁盘上的存储可以理解为乱序的,而索引就像一个目录,可以快速从乱序数据中找到所需数据。

全表扫描

如果没有索引,则进行全表扫描。要获取特定记录(例如 2 号记录),需要逐行读取磁盘,直到找到目标记录。这种逐行读取就是 I/O 操作,并且是非连续的,因此是随机 I/O。

使用索引

使用索引时,知道目标记录的位置(例如 D),可以直接访问该位置,无需逐行读取磁盘。这种一次性取出数据的操作就是顺序 I/O,因为磁盘只需读取一次即可获取所需数据。

因此,索引通过提供一个快速查找数据位置的目录,将读取数据所需的随机 I/O 转换为顺序 I/O,从而提高了数据库的性能。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容