(Lügen, verdammt Lügen und Benchmarks...)
Ich habe Ihren Test 10 Mal wiederholt, die Zeichenfolge erweitert, sodass sie volle 30 Zeichen lang war, und die folgenden durchschnittlichen Ergebnisse erhalten:
+000000000 00:00:00.011694200 (VARCHAR2)
+000000000 00:00:00.901000600 (CLOB SUBSTR)
+000000000 00:00:00.013169200 (DBMS_LOB.SUBSTR)
Ich habe dann den Substring-Bereich auf 5,14 (14,5 für DBMS_LOB.SUBSTR) geändert und bekam:
+000000000 00:00:00.011731000 (VARCHAR2)
+000000000 00:00:01.010840000 (CLOB SUBSTR)
+000000000 00:00:00.011427000 (DBMS_LOB.SUBSTR)
Ich habe dann den Bereich auf 17,14 (14,17 für DBMS_LOB.SUBSTR) geändert und bekam
+000000000 00:00:00.013578900 (VARCHAR2)
+000000000 00:00:00.964527400 (CLOB SUBSTR)
+000000000 00:00:00.011416800 (DBMS_LOB.SUBSTR)
Schließlich änderte ich den Bereich auf 25,14 (14,25 für DBMS_LOB.SUBSTR) und erhielt
+000000000 00:00:00.011210200 (VARCHAR2)
+000000000 00:00:00.916439800 (CLOB SUBSTR)
+000000000 00:00:00.013781300 (DBMS_LOB.SUBSTR)
Meine Schlussfolgerung ist, dass es am besten ist, DBMS_LOB.SUBSTR zu verwenden, wenn Sie gegen CLOBs arbeiten, da es anscheinend keine Leistungseinbußen im Vergleich zur Verwendung von SUBSTR gegen ein "normales" VARCHAR2 gibt. SUBSTR gegen einen CLOB scheint unter einer erheblichen Leistungseinbuße zu leiden. Für die Aufzeichnung – Betriebssystem =HP/UX (Unix-Variante), Oracle-Version =11.1, Prozessor =HP Itanium 2-plex. YMMV.
Teilen und genießen.
Und weil es sich lohnt, zu viel zu tun, sind hier einige weitere Ergebnisse mit auf 32767 Zeichen erweiterten Zeichenfolgen. Teilstring-Bereiche, die mit jedem Ergebnissatz angegeben werden:
1, 25000
+000000000 00:00:00.198466400 (VARCHAR2)
+000000000 00:00:02.870958700 (CLOB SUBSTR)
+000000000 00:00:00.174490100 (DBMS_LOB.SUBSTR)
1000, 25000
+000000000 00:00:00.253447900 (VARCHAR2)
+000000000 00:00:02.491790500 (CLOB SUBSTR)
+000000000 00:00:00.193560100 (DBMS_LOB.SUBSTR)
10000, 25000
+000000000 00:00:00.217812000 (VARCHAR2)
+000000000 00:00:02.268794800 (CLOB SUBSTR)
+000000000 00:00:00.222200200 (DBMS_LOB.SUBSTR)
Gleicher Tag, gleiches Ergebnis.
Cthulhu fhtagn.
(Noch einmal zur Bresche, liebe Freunde, noch einmal...)
Führen Sie die Benchmarks erneut aus, ändern Sie die Größe des CLOB auf 3276700 und nehmen Sie den Teilstring aus der Mitte, beginnend bei 2475000, für die Länge 25000. Ich bekomme:
+000000000 00:00:00.176883200 (VARCHAR2)
+000000000 00:00:02.069482600 (CLOB SUBSTR)
+000000000 00:00:00.175341500 (DBMS_LOB.SUBSTR)
(Beachten Sie, dass Änderungen nur die letzten beiden Tests betreffen).
UND...gleiche Ergebnisse, anderer Tag.
YMMV.