Leistung von SUBSTR auf CLOB
Ich habe eine PL / SQL-Prozedur, die viel leistetSUBSTR
s auf aVARCHAR2
Parameter. Ich möchte das Längenlimit entfernen und habe versucht, es in zu ändernCLOB
.
Funktioniert gut, aber die Leistung leidet, also habe ich einige Tests durchgeführt (basierend aufdiese Tests ab 2005).
AKTUALISIEREN: Ich kann dies auf verschiedenen Instanzen mit verschiedenen Oracle-Versionen und unterschiedlicher Hardware reproduzieren,dbms_lob.substr
fällt immer langsamer auf alssubstr(CLOB)
und viel langsamer alsSUBSTR(VARCHAR2)
.
Bobs Ergebnisse und die Tests im obigen Link erzählen eine andere Geschichte.
Kann jemand dies erklären oder zumindest die Ergebnisse von Bob oder mir reproduzieren? Vielen Dank!
Testergebnisse:
+000000000 00:00:00.004000000 (VARCHAR2)
+000000000 00:00:00.298000000 (CLOB SUBSTR)
+000000000 00:00:00.356000000 (DBMS_LOB.SUBSTR)
Testcode:
<code>DECLARE l_text VARCHAR2(30) := 'This is a test record'; l_clob CLOB := l_text; l_substr VARCHAR2(30); t TIMESTAMP; BEGIN t := SYSTIMESTAMP; FOR i IN 1..100000 LOOP l_substr := SUBSTR(l_text,1,14); END LOOP; dbms_output.put_line( SYSTIMESTAMP - t || ' (VARCHAR2)'); t := SYSTIMESTAMP; FOR i IN 1..100000 LOOP l_substr := SUBSTR(l_clob,1,14); END LOOP; dbms_output.put_line( SYSTIMESTAMP - t || ' (CLOB SUBSTR)'); t := SYSTIMESTAMP; FOR i IN 1..100000 LOOP l_substr := DBMS_LOB.SUBSTR(l_clob,14,1); END LOOP; dbms_output.put_line( SYSTIMESTAMP - t || ' (DBMS_LOB.SUBSTR)'); END; </code>