PostgreSQL 一個查詢的路徑

2021-08-24 10:43 更新

這里我們將介紹為了獲取結果,一個查詢將會經歷那些階段。

  1. 一個由應用程序到PostgreSQL服務器的連接必須被建立。應用程序傳遞一個查詢給服務器并等待接收由服務器傳回的結果。

  2. 分析階段對由應用程序傳遞的查詢進行語法檢查,并創(chuàng)建一個查詢樹。

  3. 重寫系統(tǒng)得到分析階段創(chuàng)建的查詢樹,并查找可以應用到該查詢樹的任何規(guī)則(存儲在系統(tǒng)目錄中)。對找到的規(guī)則,它會執(zhí)行規(guī)則體中給定的轉換。

    重寫系統(tǒng)的一個應用是實現(xiàn)視圖。不論何時發(fā)生一個視圖(即一個虛擬表)上的查詢,重寫系統(tǒng)將用戶查詢重寫為一個訪問視圖定義中給定的基本表的查詢來替代。

  4. 規(guī)劃器/優(yōu)化器接手(重寫過的)查詢樹并創(chuàng)建一個將被作為執(zhí)行器輸入的查詢計劃。

    它會先創(chuàng)建所有可能導向相同結果的路徑。例如,如果在一個被掃描的關系上有一個索引,則有兩條可供掃描的路徑。其中之一是一個簡單的順序掃描,而另一個則是使用索引。接下來執(zhí)行每條路徑所需的代價被估算出來并且代價最低的路徑將被選中。代價最低的路徑將被擴展成一個完整的計劃可供執(zhí)行器使用。

  5. 執(zhí)行器遞歸地逐步通過計劃樹并按照計劃表述的方式獲取行。執(zhí)行器在掃描關系時會使用存儲系統(tǒng)、執(zhí)行排序連接、估算條件并最后歸還得到的行。

在下面的小節(jié)中我們將覆蓋上述列出的每一項的詳細內容,以便更好地理解PostgreSQL的內部控制和數(shù)據(jù)結構。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號