PostgreSQL查詢代價估算(一)

2021-07-28 11:12:16 字數 834 閱讀 3687

postgresql查詢優化代價估算基於cpu開銷和io開銷,計算公式為:

總代價=啟動代價+ i/o代價+ cpu代價

cost = s + p + w * t

1.        

p為計畫執行的時訪問的頁數,反映了i/o花費

2.        

t為訪問的元組數,反映了cpu花費(儲存層是以頁面為單位,資料以頁面的形式被讀入記憶體,每個頁面上可能有多條元組,訪問元組,需要解析元組結構,才能把元組上的字段讀出,這消耗的是cpu)

3.        

w為權重因子,表明i/o到cpu的相關性,又稱為選擇率(selectivity)。在system-r演算法中,每個可能的選擇率固化在代價估計的**中,而在資料字典中儲存代價公式和需要的統計資訊。而postgresql選擇率的處理較為特殊,每個選擇率公式使用乙個引數化的過程(函式)來表達,選擇率計算通過將限制條件中的關係、屬性、常量資訊和索引識別符號以及索引鍵數目等引數傳遞給相應的過程來計算。

其中磁碟i/o受以下因素影響:

1)        所選取用於實現查詢的特定的邏輯操作符;

2)        中間關係的大小;

3)        用於實現邏輯操作符的物理操作符;

4)        相似操作的排序,例如連線順序的選擇;

5)        物理操作符之間的引數傳遞。

代價估算,是估算某個路徑的花費,屬於物理優化範疇。路徑可以是單錶的路徑,也可以是兩個關係連線得到的路徑,還可以是多個表根據不同的連線方式(左深樹、緊密樹等)得到的連線路徑。所以如下按照單錶掃瞄、兩表連線這樣的分類展開。

PostgreSQL查詢代價估算(五)

1.1.1.1 巢狀迴圈的代價 final cost nestloop 函式功能 計算兩個關係使用巢狀迴圈連線演算法的花費。內外表的元組數決定著cpu的花費。對於nestloop花費的計算,分為兩個函式 1.一是initial cost nestloop函式,初步估計nestloop演算法的花費,形...

postgresql分頁查詢

資料庫中存了3000w條資料,兩種分頁查詢測試時間 第一種select from test table where i id 1000 limit 100 time 0.016s 第二種select from test table limit 100 offset 1000 time 0.003s ...

PostgreSQL實用查詢SQL

參考 postgresql實用查詢sql 檢視 資料庫 www.2cto.com select from pg database 檢視表空間 select from pg tablespace 檢視語言 select from pg language 檢視角色使用者 select from pg u...