本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
PREPARE
準備陳述式供執行。
PREPARE 會建立預備陳述式。當 PREPARE 陳述式執行時,會剖析、重寫及規劃指定的陳述式 (SELECT、INSERT、UPDATE 或 DELETE)。接著對預備陳述式發出 EXECUTE 命令時,Amazon Redshift 可能會選擇先修改查詢執行計畫 (依據指定的參數值改善效能),再執行預備陳述式。
語法
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
參數
- plan_name
-
給予此特定預備陳述式的任意名稱。此名稱在單一工作階段內必須是唯一的,且後續會用來執行或解除配置先前的預備陳述式。
- datatype
-
預備陳述式的參數資料類型。若要在預備陳述式本身內參考參數,請使用 $1、$2,以此類推。
- statement
-
任何 SELECT、INSERT、UPDATE 或 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;