concat与||之间是否存在性能差异?在oracle

时间:2014-09-29 15:06:01

标签: oracle concat

我想在oracle sql查询中连接多个(3)列。目前我正在使用函数concat。 有人建议使用||代替concat,因为它可以带来性能优势。

这是真的吗?如果是,为什么?

我只看到了||的好处是书面查询更具可读性。

2 个答案:

答案 0 :(得分:7)

我设置了一个简单的PL / SQL脚本(下面),在每个循环中尝试两个串联选项。 ||的结果为142.93秒,CONCAT的结果为144.11秒。无论哪种方式,你都在谈论每次操作大约1.4微秒。我的结论是,似乎没有任何可观的性能差异。

除了更具可读性之外,||是串联运算符的ANSI标准。


DECLARE
   i NUMBER;
   j NUMBER := 100000000;
   v VARCHAR2 (1000);
   v_start TIMESTAMP := SYSTIMESTAMP;
BEGIN
   FOR i IN 1 .. j LOOP
      v := DBMS_RANDOM.VALUE () || DBMS_RANDOM.VALUE ();
   END LOOP;    
   DBMS_OUTPUT.put_line ('1: ' || (SYSTIMESTAMP - v_start));
END;

DECLARE
   i NUMBER;
   j NUMBER := 100000000;
   v VARCHAR2 (1000);
   v_start TIMESTAMP := SYSTIMESTAMP;
BEGIN
   FOR i IN 1 .. j LOOP
      v := CONCAT (DBMS_RANDOM.VALUE (), DBMS_RANDOM.VALUE ());
   END LOOP;    
   DBMS_OUTPUT.put_line ('2: ' || (SYSTIMESTAMP - v_start));
END;

作为脚注,Oracle说明CONCAT函数的用途:

  

在具有不同系统的系统之间移动SQL脚本文件时   字符集,例如ASCII和EBCDIC之间,垂直条可能   不能转换为目标Oracle所需的垂直条   数据库环境。 Oracle提供CONCAT字符函数   对于垂直条形操作符的替代方法   难以或无法控制通过操作执行的翻译   系统或网络实用程序。在应用程序中使用此功能   将在具有不同字符集的环境之间移动。

答案 1 :(得分:3)

两者都是相同的,CONCAT()用于支持SQL脚本处理的不同字符集,其中'||'可能被错误地解释。

来自Documentation

  

在大多数平台上,连接运算符是两个实心垂直   条形图,如表4-3所示。但是,一些IBM平台使用了破解   此运算符的垂直条。在两者之间移动SQL脚本文件时   具有不同字符集的系统,例如ASCII和   EBCDIC,垂直条可能无法转换为垂直条   目标Oracle数据库环境所需的。 Oracle提供   CONCAT字符函数作为垂直条的替代   对于难以或无法控制的情况的操作员   由操作系统或网络实用程序执行的转换。使用   此功能在将在环境之间移动的应用程序中   具有不同的字符集。

相关问题