本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
PREPARE
準備陳述式供執行。
PREPARE 會建立準備好的陳述式。執行PREPARE陳述式時,會剖析SELECT、重寫和規劃指定的陳述式 INSERT(UPDATE、、 或 DELETE)。然後,在為準備好的陳述式發出EXECUTE命令時,Amazon Redshift 可能會選擇性地修改查詢執行計畫 (以根據指定的參數值改善效能),然後再執行準備好的陳述式。
語法
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
參數
- plan_name
-
給予此特定預備陳述式的任意名稱。此名稱在單一工作階段內必須是唯一的,且後續會用來執行或解除配置先前的預備陳述式。
- datatype
-
預備陳述式的參數資料類型。若要在預備陳述式本身內參考參數,請使用 $1、$2,以此類推。
- statement
-
任何 SELECT、UPDATE、 INSERT或 DELETE陳述式。
使用須知
預備陳述式可採用參數:這些值會在陳述式執行時替換到其中。若要將參數包含在準備好的陳述式中,請在PREPARE陳述式中提供資料類型清單,並在陳述式中,使用符號 $1、$2、... 依位置參考參數 執行陳述式時,請在EXECUTE陳述式中指定這些參數的實際值。如需詳細資訊,請參閱EXECUTE。
預備陳述式只會在目前工作階段期間內存在。當工作階段結束時,就會捨棄預備陳述式,因此必須再次建立它才能再度使用。這也表示,單一預備陳述式無法供多個同步的資料庫用戶端使用;不過,每個用戶端可建立自己要使用的預備陳述式。您可以使用 DEALLOCATE命令手動移除準備的陳述式。
在使用單一工作階段執行大量類似的陳述式時,預備陳述式能獲得最大效能。如前所述,每次重頭執行預備陳述式時,Amazon Redshift 都會根據指定的參數值修改查詢執行計畫以提升效能。若要檢查 Amazon Redshift 為任何特定EXECUTE陳述式選擇的查詢執行計畫,請使用 EXPLAIN命令。
如需 Amazon Redshift 為進行查詢最佳化所收集的查詢計畫和統計資訊的相關資訊,請參閱 ANALYZE 命令。
範例
建立暫存資料表、準備INSERT陳述式,然後執行它:
DROP TABLE IF EXISTS prep1; CREATE TABLE prep1 (c1 int, c2 char(20)); PREPARE prep_insert_plan (int, char) AS insert into prep1 values ($1, $2); EXECUTE prep_insert_plan (1, 'one'); EXECUTE prep_insert_plan (2, 'two'); EXECUTE prep_insert_plan (3, 'three'); DEALLOCATE prep_insert_plan;
準備SELECT陳述式,然後執行它:
PREPARE prep_select_plan (int) AS select * from prep1 where c1 = $1; EXECUTE prep_select_plan (2); EXECUTE prep_select_plan (3); DEALLOCATE prep_select_plan;