sql >> Databasteknik >  >> RDS >> Oracle

Finns det prestandaskillnad mellan concat vs || i orakel

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:



  1. MySQL GROUP BY en kolumn och visa värden i olika kolumner

  2. Fyll i slumpmässiga data från en annan tabell

  3. Hur man väljer en enskild rad på 100 miljoner x

  4. Fel i MySQL-biblioteket för Node.js