为什么 Oracle 连接到 HANA 使用绑定变量工作得更快
Why Oracle connection to HANA works much faster with bind variables
我们在从 Oracle 到 SAP HANA 的连接(通过 Oracle Gateway)时遇到问题。在立即执行中使用绑定变量时,SQL 的运行速度比执行标准 SQL 时快得多。
F.e.:
select count (1) from SYNONYM_TO_HANA_TABLE where field='1234';
经过时间:96.808 秒
declare
v_test number;
begin
execute immediate 'select count (1) from SYNONYM_TO_HANA_TABLE where field= :a' into v_test using '1234';
dbms_output.put_line('return: ' || v_test);
end;
/
经过时间:0.179 秒
基本上两个 SQL returns 相同的结果,但也许有人能够解释为什么执行时间之间存在如此大的差异。谢谢!
彼得
弄清楚这些查询做了什么。
第一步可以是比较执行计划。
select /* my_query1 */ count(1) from SYNONYM_TO_HANA_TABLE ;
declare
begin
execute immediate 'select /* my_query2 */ count(1) from SYNONYM_TO_HANA_TABLE ';
end;
/
select sql_id,sql_text from v$sql where sql_text like '%my_quere%' ;
select * from table(dbms_xplan.display_cursor('sql_id',0,'ALL'));
我们在从 Oracle 到 SAP HANA 的连接(通过 Oracle Gateway)时遇到问题。在立即执行中使用绑定变量时,SQL 的运行速度比执行标准 SQL 时快得多。
F.e.:
select count (1) from SYNONYM_TO_HANA_TABLE where field='1234';
经过时间:96.808 秒
declare
v_test number;
begin
execute immediate 'select count (1) from SYNONYM_TO_HANA_TABLE where field= :a' into v_test using '1234';
dbms_output.put_line('return: ' || v_test);
end;
/
经过时间:0.179 秒
基本上两个 SQL returns 相同的结果,但也许有人能够解释为什么执行时间之间存在如此大的差异。谢谢!
彼得
弄清楚这些查询做了什么。 第一步可以是比较执行计划。
select /* my_query1 */ count(1) from SYNONYM_TO_HANA_TABLE ;
declare
begin
execute immediate 'select /* my_query2 */ count(1) from SYNONYM_TO_HANA_TABLE ';
end;
/
select sql_id,sql_text from v$sql where sql_text like '%my_quere%' ;
select * from table(dbms_xplan.display_cursor('sql_id',0,'ALL'));