猿问

MYSQL走非聚集索引再走主键索引的时候为什么不对查询到的主键的物理位置进行排序再进行磁盘读?

有一个问题,我们都知道,mysql是主键聚集索引的,每个非叶子页保存着表行的页号,然后根据页号在磁盘上进行读取,获取表行数据.问题来了:1.但是如果mysql先走非聚集索引,获取到主键值以后,在主键的聚集索引上查找到主键在磁盘上的物理位置,进行读取的时候,因为获取到的主键值不是顺序的,所以导致全部的随机I/O,我觉得很奇怪,为什么mysql不先对获取到的页号进行排序,这样不就可以较为顺序的读取了吗,而且内存中排序速度很快,这样可以降低大量随机I/O时间啊.为什么不这么做而是直接进行随机读取呢?2.我将非叶子页保存的指向表行的页号理解为该表行在磁盘上保存的物理位置,磁盘根据这个物理位置进行磁头和磁臂的移动以读取该表行数据,这个理解是没问题的吧?请教各位大神啦~~谢谢.
眼眸繁星
浏览 707回答 2
2回答

慕姐4208626

顺序IO指数据的物理存储是连续的,因此磁盘读取的时候也可以连续读取,不需要重新定位进行磁头寻道,因此读取能力比随机读取IO要高很多。非聚集索引获取到主键值,按照你的说法对主键值进行排序后,各主键值的存储位置仍可能差异很大,这时候还是随机IO。如:一个表,有id和name两个字段,id=1和id=1000的name=张三,如果按照name上创建了非聚集索引,并在按照name=张三进行查询,id排序后用处也不大。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答