Index
從磁碟檢索索引頁面後,數據庫記錄訪問是否順序?
這個問題發佈在 Stack Overflow 上,但沒有得到答复,我希望也許在這裡我能找到答案。
我對數據庫的了解是,如果在磁碟頁面中找到查詢或請求的記錄,則將整個頁面載入到主記憶體中。
例如,如果表的內容儲存在磁碟頁面中,如下所示:
+-------+------------+----------+-----------+--------+ | rowid | EmployeeId | Lastname | Firstname | Salary | +-------+------------+----------+-----------+--------+ | 001 | 10 | Smith | Joe | 40000 | | 002 | 12 | Jones | Mary | 50000 | | 003 | 11 | Johnson | Cathy | 4000 | | 004 | 22 | Jones | Bob | 55000 | +-------+------------+----------+-----------+--------+
假設索引是在
EmployeeId
.在主記憶體中載入頁面後,如何搜尋記錄?(順序或其他方法)
我想知道這是如何在 Oracle 和其他一些如 Microsoft SQL Server 中執行的。
在SQL Server中,對於正常索引(即不是列儲存或 Hekaton),儲存引擎可以選擇兩種方法之一來查找搜尋的起點或終點。第一個選項是使用頁面末尾的偏移數組進行二進制搜尋。第二種選擇是使用線性插值。
在找到搜尋起點/終點之後,搜尋的任何範圍掃描部分基本上是連續的。更具體地說,引擎會保存一個“cookie”來記住搜尋位置。
當執行引擎需要下一行時,儲存引擎驗證 cookie 仍然有效(即並發更改沒有影響物理結構)並繼續使用偏移表從該點查找下一條匹配記錄以及必要時的上一頁/下一頁連結,向前或向後搜尋。如果 cookie 無效,引擎會有效地重新尋找正確的目前位置。
預讀機制用於幫助確保範圍掃描所需的頁面在執行引擎需要頁面之前存在於記憶體中。