Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Existe diferença de desempenho entre concat vs || em oráculo


Configurei um script PL/SQL simples (abaixo) para tentar as duas opções de concatenação em um loop 100 milhões de vezes cada. O resultado para || foi de 142,93 segundos e CONCAT foi de 144,11 segundos. De qualquer forma, você está falando de aproximadamente 1,4 microssegundos por operação. Minha conclusão é que não parece haver nenhuma diferença de desempenho apreciável.

Além de ser mais legível, || é o padrão ANSI para o operador de concatenação.
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;

Como nota de rodapé, Oracle diz isso sobre o propósito do CONCAT função: