簡體   English   中英

MYSQL 如何在特定索引頁中找到鍵?

[英]How does MYSQL finds the key inside particular index page?

據我了解,MySQL 將聚集索引存儲在其自定義的樹狀數據結構中(類似於 B+ 樹)。

該樹的節點稱為“頁面”,可能包含大量鍵。 假設是 100。假設我們正在尋找密鑰 K1。 使用樹,我們可以找到頁面 P1,其中包含鍵 K1 或指向該頁面的指針以進一步查看。

但是 MYSQL 如何找到要在同一頁面中查找的鍵或適當的指針呢? 頁面內的鍵是否存儲在數組中,而 MYSQL 使用二分搜索還是它們存儲在某個本地樹中,或者它只是對頁面內所有鍵的線性掃描?

是的,MySQL 在頁面內使用二進制搜索,請參閱文檔

頁面目錄

頁的頁目錄部分具有可變數量的記錄指針。 有時記錄指針被稱為“槽”或“目錄槽”。 與其他 DBMS 不同,InnoDB 沒有用於頁面中每條記錄的插槽。 相反,它保留一個稀疏目錄。 在完整的頁面中,每六條記錄將有一個槽。

槽跟蹤記錄的邏輯順序(鍵順序而不是堆上的放置順序)。 因此,如果記錄是'A''B''F''D',則插槽將是(指向'A'的指針)(指向'B'的指針)(指向'D'的指針)(指向'F'的指針) . 因為槽是按鍵順序排列的,而且每個槽都有固定的大小,所以很容易通過槽對頁面上的記錄進行二分搜索。

由於頁目錄沒有每條記錄的槽,二進制搜索只能給出一個粗略的位置,然后 InnoDB 必須遵循“下一個”記錄指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM