Jag satte upp ett enkelt PL/SQL-skript (nedan) för att prova båda sammankopplingsalternativen inom en loop 100 miljoner gånger vardera. Resultatet för ||
var 142,93 sekunder och CONCAT
var 144,11 sekunder. Hur som helst, du pratar om ungefär 1,4 mikrosekunder per operation. Min slutsats är att det inte verkar vara någon märkbar prestandaskillnad.
Förutom att vara mer läsbar, är ||
är ANSI-standarden för sammanlänkningsoperatören.
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;
Som en fotnot, Oracle
säger detta om syftet med CONCAT
funktion: