Provided by:
manpages-zh_1.5-1_all 
NAME
PREPARE - 創建一虓n的查詢
SYNOPSIS
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
DESCRIPTIONyz
PREPARE 創建一茪w準備好的查詢。 一-
茪w準備好的查詢是伺服器端的對象,可以用於優化性能。 在執行 PREPARE
語句的時唌A指定的查詢被分析,姨g以及規劃。 當隨後發出 EXECUTE 語句的時-
唌A 已準備好的查詢就只需n執行了。因此,分析,-
姨g,以及規劃階段都只執行一次,而不是每次查詢執行的時堀τ執行一次。
準備好的查詢可以接受參數:在它執行的時埭懂咧鴐d詢中的數C n給一-
虓n的查詢聲明參數,我抳愯在 PREPARE 語句裏包含一-
蚍矞型的列表。在查詢本卹堙A你可以按照位置來引用這些參數, 比如
$1,$2,等。 在執行查詢的時唌A在 EXECUTE 語句裏為這些參數聲明實際的數-
C 參考 EXECUTE [execute(7)] 獲取更多信息。
準備好的查詢是在本地存儲的(在當前後端裏),並且只是在當前數據庫會話的過程中存在。
如果客戶端退出,那麼準備好的查詢就會被遺忘,因此我怚眸椰b被奐s使用之前-
奐s創建。 這也意味著一虓n的查詢不能被多茼P時的數據庫客戶端使用;
但是,每茷廕搘i以創建它怞菑v的已準備好的查詢來使用。
如果一虓|話準備用於執行大量類似的查詢,那麼已準備好的查詢可以獲得最大-
度的性能優勢。 如果查詢非常復雜,需n復雜的規劃或者-
姨g,那麼性能差距將非常明顯。 比如,如果查詢設-
p許多表的連接,或者有多種規則n求應用。如果查詢的規劃和姨g相對簡單,
而執行起來開銷相當大,那麼已準備好的查詢的性能優勢就不那麼明顯。
PARAMETERS數
plan_name
給予這荅S定的已準備好查詢的任意名字。它必須在一-
虓|話中是唯一的, 並且用於執行或者刪除一茷e捧n的查詢。
datatype
已準備好查詢的某荌捊獐矞型。n在已準備好查詢內部引用這-
荌捊A使用 $1,$2,等。
statement
任何 SELECT, INSERT, UPDATE, 或 DELETE 語句。
NOTES`N
在一些情況下,PostgreSQL 為一-
茪w準備好的查詢生成的查詢規劃可能還不如按照普通方法提交並執行的查詢生成的規劃好。
這是因為該查詢在被規劃的時唌]也是優化器視圖判斷最優查詢規劃的時唌^,
在查詢中聲明的任何參數的實際數暀ㄔi見。 PostgreSQL
在表中收集數據分布的統p,
而且可以利用查詢中的常量來猜測執行查詢的可能結果。 因為這些數據在準備-
種帶參數的查詢的規劃的時埡暀ㄔi得, 所以,選出來得規劃可能是次好的。
n檢查 PostgreSQL 為已準備好的查詢選取的查詢p劃, 使用 EXPLAIN EXECUTE
。
有關查詢規劃和 PostgreSQL 為查詢優化的目的收集的統p的更多信息, 參閱
ANALYZE [analyze(7)] 文件。
COMPATIBILITYe性
SQL 標準包含一 PREPARE 語句, 但是它只用於嵌入的 SQL
客戶端。PostgreSQL 實現的 PREPARE 語句的語法也略有不同。
者
Postgresql <laser@pgsqldb.org>