回表查詢并非順序IO的緣由
回表查詢通常被認為是隨機IO,即使我們已經獲取了所需記錄的主鍵。這是因為:
順序IO和隨機IO的定義
順序IO是指讀取的數據在存儲介質上連續存在,而隨機IO是指讀取的數據在存儲介質上的位置是隨機分布的。
B+樹索引和頁的隨機性
大多數數據庫系統(如mysql Innodb)使用B+樹索引來組織數據,其中數據存儲在稱為頁的固定大小單元中。頁在存儲介質上的位置是隨機的。
回表查詢的跨頁訪問
回表查詢涉及訪問主表的主鍵和獲取的記錄。在大多數情況下,主鍵和記錄位于不同的頁中。這使得回表查詢需要跨頁訪問,這必然導致隨機IO。
即使主鍵和記錄在同一頁中
即使主鍵和記錄位于同一頁中,回表查詢仍然是隨機IO。這是因為數據庫不保證在讀取主鍵頁后立即讀取包含記錄的頁。操作系統或文件系統可能會將頁緩存到內存中,導致后續對記錄頁的訪問需要額外的隨機IO。
結論
因此,回表查詢通常是隨機IO,因為它們需要跨頁訪問,即使主鍵和記錄位于同一頁中。這與對順序索引和隨機索引的定義是一致的。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END