Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       PREPARE - 創建一個準備好的查詢

SYNOPSIS

       PREPARE plan_name [ (datatype [, ...] ) ] AS statement

DESCRIPTION 描述

       PREPARE 創建一個已準備好的查詢。 一個已準備好的查詢是伺服器端的對象,可以用於優化性能。 在
       執行 PREPARE 語句的時候,指定的查詢被分析,重寫以及規劃。 當隨後發出 EXECUTE  語句的時候,
       已準備好的查詢就只需要執行了。因此,分析,重寫,以及規劃階段都只執行一次,而不是每次查詢執
       行的時候都要執行一次。

        準備好的查詢可以接受參數:在它執行的時候替換到查詢中的數值。   要給一個準備好的查詢聲明參
       數,我們需要在  PREPARE 語句裏包含一個數據類型的列表。在查詢本身裏,你可以按照位置來引用這
       些參數, 比如 $1,$2,等。 在執行查詢的時候,在  EXECUTE  語句裏為這些參數聲明實際的數值。
       參考 EXECUTE [execute(7)] 獲取更多信息。

        準備好的查詢是在本地存儲的(在當前後端裏),並且只是在當前數據庫會話的過程中存在。 如果客
       戶端退出,那麼準備好的查詢就會被遺忘,因此我們必須在被重新使用之前重新創建。  這也意味著一
       個準備好的查詢不能被多個同時的數據庫客戶端使用;  但是,每個客戶端可以創建它們自己的已準備
       好的查詢來使用。

        如果一個會話準備用於執行大量類似的查詢,那麼已準備好的查詢可以獲得最大限度的性能優勢。 如
       果查詢非常復雜,需要復雜的規劃或者重寫,那麼性能差距將非常明顯。  比如,如果查詢設計許多表
       的連接,或者有多種規則要求應用。如果查詢的規劃和重寫相對簡單,  而執行起來開銷相當大,那麼
       已準備好的查詢的性能優勢就不那麼明顯。

PARAMETERS 參數

       plan_name
               給予這個特定的已準備好查詢的任意名字。它必須在一個會話中是唯一的,  並且用於執行或
              者刪除一個前面準備好的查詢。

       datatype
               已準備好查詢的某個參數的數據類型。要在已準備好查詢內部引用這個參數,使用
              $1,$2,等。

       statement
               任何 SELECT, INSERT, UPDATE, 或 DELETE 語句。

NOTES 注意

        在一些情況下,PostgreSQL   為一個已準備好的查詢生成的查詢規劃可能還不如按照普通方法提交並
       執行的查詢生成的規劃好。  這是因為該查詢在被規劃的時候(也是優化器視圖判斷最優查詢規劃的時
       候),  在查詢中聲明的任何參數的實際數值都還不可見。 PostgreSQL 在表中收集數據分布的統計,
       而且可以利用查詢中的常量來猜測執行查詢的可能結果。  因為這些數據在準備哪種帶參數的查詢的規
       劃的時候還不可得, 所以,選出來得規劃可能是次好的。 要檢查 PostgreSQL 為已準備好的查詢選取
       的查詢計劃, 使用  EXPLAIN EXECUTE 。

        有關查詢規劃和    PostgreSQL    為查詢優化的目的收集的統計的更多信息,    參閱    ANALYZE
       [analyze(7)] 文件。

COMPATIBILITY 相容性

        SQL  標準包含一個 PREPARE 語句, 但是它只用於嵌入的 SQL 客戶端。PostgreSQL 實現的 PREPARE
       語句的語法也略有不同。

譯者

       Postgresql 中文網站 何偉平 <laser@pgsqldb.org>