有一個(gè)問題,我們都知道,mysql是主鍵聚集索引的,每個(gè)非葉子頁保存著表行的頁號,然后根據(jù)頁號在磁盤上進(jìn)行讀取,獲取表行數(shù)據(jù).問題來了:1.但是如果mysql先走非聚集索引,獲取到主鍵值以后,在主鍵的聚集索引上查找到主鍵在磁盤上的物理位置,進(jìn)行讀取的時(shí)候,因?yàn)楂@取到的主鍵值不是順序的,所以導(dǎo)致全部的隨機(jī)I/O,我覺得很奇怪,為什么mysql不先對獲取到的頁號進(jìn)行排序,這樣不就可以較為順序的讀取了嗎,而且內(nèi)存中排序速度很快,這樣可以降低大量隨機(jī)I/O時(shí)間啊.為什么不這么做而是直接進(jìn)行隨機(jī)讀取呢?2.我將非葉子頁保存的指向表行的頁號理解為該表行在磁盤上保存的物理位置,磁盤根據(jù)這個(gè)物理位置進(jìn)行磁頭和磁臂的移動以讀取該表行數(shù)據(jù),這個(gè)理解是沒問題的吧?請教各位大神啦~~謝謝.
MYSQL走非聚集索引再走主鍵索引的時(shí)候?yàn)槭裁床粚Σ樵兊降闹麈I的物理位置進(jìn)行排序再進(jìn)行磁盤讀?
眼眸繁星
2019-05-25 13:10:04