Ustawiłem prosty skrypt PL/SQL (poniżej), aby wypróbować obie opcje łączenia w pętli 100 milionów razy. Wynik dla ||
było 142,93 sekundy i CONCAT
było 144,11 sekundy. Tak czy inaczej, mówimy o około 1,4 mikrosekundy na operację. Mój wniosek jest taki, że wydaje się, że nie ma żadnej znaczącej różnicy w wydajności.
Oprócz większej czytelności, ||
to standard ANSI dla operatora konkatenacji.
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;
Jako przypis:Oracle
mówi to o celu CONCAT
funkcja: