PostgreSQL表掃描方法解析

本文介紹PG的表掃描方法原理。

全表掃描函數在heap handler API接口函數爲heap_getnextslot函數。該函數從磁盤讀取數據頁到內存並遍歷頁內記錄,將其存儲到slot中返回用戶。這個函數一次只獲取一個記錄,倒到上次ExecutePlan函數中循環調用ExecProcNode再次進入該函數獲取下一個記錄,依次類推,直到獲得所有記錄。

主要流程:

1、首先將入參TableScanDesc sscan強制轉換類型到HeapScanDesc scan,後續向scan中保存掃描記錄及狀態

2、分兩種頁掃描:如果sscan->rs_flags爲SO_ALLOW_PAGEMODE即掃描所有滿足可見性的記錄,調用函數heapgettup_pagemode;否則掃描所有記錄,調用函數heapgettup

3、最後調用函數ExecStoreBufferHeapTuple將scan->rs_ctup存儲到slot中。

4、這裏首先說函數heapgettup_pagemode。這個函數根據三個掃描方向分別處理。只針對向前掃描說明:

    1)第一次進這個函數scan->rs_inited爲false:從scan->rs_startblock

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章