Sql EXECUTE('CALL SCHEMA.PROC')、CALL SCHEMA.PROC和EXCEUTE之间是否存在性能差异
假设以下查询结构,三个选项之间是否存在性能差异:Sql EXECUTE('CALL SCHEMA.PROC')、CALL SCHEMA.PROC和EXCEUTE之间是否存在性能差异,sql,stored-procedures,query-optimization,dynamic-sql,hana,Sql,Stored Procedures,Query Optimization,Dynamic Sql,Hana,假设以下查询结构,三个选项之间是否存在性能差异: CREATE PROCEDURE SCHEMA.PROC BEGIN TEMP = SELECT * FROM A JOIN B JOIN C; INSERT INTO TABLE (TEMP); END; 备选案文1: STRING_OF_PROC = 'CALL SCHEMA.PROC()'; EXECUTE IMMEDIATE (STRING_OF_PROC); 备选案文2: CALL SCHEMA.PROC(); 备选案文3: E
CREATE PROCEDURE SCHEMA.PROC
BEGIN
TEMP = SELECT * FROM A JOIN B JOIN C;
INSERT INTO TABLE (TEMP);
END;
备选案文1:
STRING_OF_PROC = 'CALL SCHEMA.PROC()';
EXECUTE IMMEDIATE (STRING_OF_PROC);
备选案文2:
CALL SCHEMA.PROC();
备选案文3:
EXECUTE IMMEDIATE ( TEMP = SELECT * FROM A JOIN B JOIN C;
INSERT INTO TABLE (TEMP); );
如果不同的RDBMS之间存在差异,我将在SAP HANA空间中工作。好的,这个问题相当模糊,因此我的回答将只描述不同的选项以及接下来的内容 选项0:这是一个执行SELECT并尝试将结果插入表的存储过程 选项1:准备一个字符串,其中包含调用过程的文本,然后将该字符串用于动态SQL执行立即执行 选项2:直接调用程序 选项3:使用一块SQLScript命令执行立即调用 Ad选项3根本不起作用并导致错误,因为EXECUTE IMMEDIATE需要一个命令字符串。此命令字符串必须是正确的SQL,但这里的情况并非如此。此外,它只能是单个命令,不能是多个命令的列表 选项1和选项2:从性能角度来看,这两个选项几乎相同。显然,动态SQL选项需要额外的解析,可能会导致共享SQL缓存中出现额外的条目,但这应该是过程调用的整个运行时中可以忽略的一部分 顺便说一句:选项0中的过程也不起作用-该过程在几个地方语法错误 一句话:对于没有参数或返回值的单个过程的调用,动态SQL调用和直接调用之间的性能差异可能可以忽略不计