到目前为止,隐式并行化仅适用于表变量分配和独立的只读过程调用。但是,DML 语句和读写过程调用必须按顺序执行。现在,您可以使用并行执行块来并行化独立的 DML 语句和读写过程调用:
BEGIN PARALLEL EXECUTION
END;
例如,在以下过程中,不同表上的多个 UPDATE 语句是并行的:
CREATE COLUMN TABLE CTAB1(A INT);
CREATE COLUMN TABLE CTAB2(A INT);
CREATE COLUMN TABLE CTAB3(A INT);
CREATE COLUMN TABLE CTAB4(A INT);
CREATE COLUMN TABLE CTAB5(A INT);
CREATE PROCEDURE ParallelUpdate AS
BEGIN
BEGIN PARALLEL EXECUTION
UPDATE CTAB1 SET A = A + 1;
UPDATE CTAB2 SET A = A + 1;
UPDATE CTAB3 SET A = A + 1;
UPDATE CTAB4 SET A = A + 1;
UPDATE CTAB5 SET A = A + 1;
END;
END;
备注并行执行块中仅支持列存储表上的 DML 语句。 在下一个示例中,表变量中的多个记录将并行插入到不同的表中。 示例代码CREATE PROCEDURE ParallelInsert (IN intab TABLE (A INT, I INT)) AS BEGIN DECLARE tab TABLE(A INT); tab = SELECT t.A AS A from TAB0 t LEFT OUTER JOIN :intab s ON s.A = t.A; BEGIN PARALLEL EXECUTION SELECT * FROM :tab s where s.A = 1 INTO CTAB1; SELECT * FROM :tab s where s.A = 2 INTO CTAB2; SELECT * FROM :tab s where s.A = 3 INTO CTAB3; SELECT * FROM :tab s where s.A = 4 INTO CTAB4; SELECT * FROM :tab s where s.A = 5 INTO CTAB5; END; END; 还可以对读写过程并行化多个调用。在以下示例中,将并行执行多个执行独立 INSERT 操作的过程。 示例代码CREATE COLUMN TABLE ctab1 (i INT);CREATE COLUMN TABLE ctab2 (i INT);CREATE COLUMN TABLE ctab3 (i INT);CREATE PROCEDURE cproc1 AS BEGIN INSERT INTO ctab1 VALUES (1);END;CREATE PROCEDURE cproc2 AS BEGIN INSERT INTO ctab2 VALUES (2);END;CREATE PROCEDURE cproc3 AS BEGIN INSERT INTO ctab3 VALUES (3);END;CREATE PROCEDURE cproc AS BEGIN BEGIN PARALLEL EXECUTION CALL cproc1 (); CALL cproc2 (); CALL cproc3 (); END;END;CALL cproc; 备注 读写过程中仅允许以下语句,可在并行块内调用这些语句: DML必需逻辑自主事务隐式 SELECT 和 SELECT INTO 标量变量
以下限制适用:
SELECT 和 SELCT INTO 标量变量语句。
限制显式并行执行块中不支持具有缺省值的 SELECT INTO 子句。避免在同一 SQLScript 块中使用这两个功能,因为这可能会导致意外行为或运行时错误。有关详细信息,请参阅 3637202 。