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

Viv*_*oel 3 oracle concat

我想在oracle sql查询中连接多个(3)列.目前我正在使用功能concat.有人建议用它||代替,concat因为它带来了性能上的好处.

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

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

All*_*lan 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;
Run Code Online (Sandbox Code Playgroud)

作为脚注,Oracle说这个CONCAT功能的目的:

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