(Kłamstwa, cholera kłamstwa i testy porównawcze...)
Powtórzyłem twój test 10 razy, rozszerzając ciąg tak, aby miał pełne 30 znaków, i uzyskałem następujące uśrednione wyniki:
+000000000 00:00:00.011694200 (VARCHAR2)
+000000000 00:00:00.901000600 (CLOB SUBSTR)
+000000000 00:00:00.013169200 (DBMS_LOB.SUBSTR)
Następnie zmieniłem zakres podciągów na 5,14 (14,5 dla DBMS_LOB.SUBSTR) i otrzymałem:
+000000000 00:00:00.011731000 (VARCHAR2)
+000000000 00:00:01.010840000 (CLOB SUBSTR)
+000000000 00:00:00.011427000 (DBMS_LOB.SUBSTR)
Następnie zmieniłem zakres na 17,14 (14,17 dla DBMS_LOB.SUBSTR) i otrzymałem
+000000000 00:00:00.013578900 (VARCHAR2)
+000000000 00:00:00.964527400 (CLOB SUBSTR)
+000000000 00:00:00.011416800 (DBMS_LOB.SUBSTR)
Ostatecznie zmieniłem zakres na 25,14 (14,25 dla DBMS_LOB.SUBSTR) i otrzymałem
+000000000 00:00:00.011210200 (VARCHAR2)
+000000000 00:00:00.916439800 (CLOB SUBSTR)
+000000000 00:00:00.013781300 (DBMS_LOB.SUBSTR)
Mój wniosek jest taki, że podczas pracy z CLOB-em najlepiej jest użyć DBMS_LOB.SUBSTR, ponieważ wydaje się, że w rzeczywistości nie ma żadnej utraty wydajności w porównaniu z użyciem SUBSTR przeciwko „normalnemu” VARCHAR2. SUBSTR przeciwko CLOB wydaje się cierpieć z powodu znacznej utraty wydajności. Dla przypomnienia - OS =HP/UX (wariant Unix), wersja Oracle=11.1, procesor=HP Itanium 2-plex. MMW.
Dziel się i ciesz.
A ponieważ jeśli warto to robić, to warto przesadzać, oto więcej wyników z ciągami rozszerzonymi do 32767 znaków. Zakresy podciągów podane przy każdym zestawie wyników:
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)
Ten sam dzień, ten sam wniosek.
Cthulhu fhtag.
(Jeszcze raz do wyłomu, drodzy przyjaciele, jeszcze raz...)
Powtórz testy, zmieniając rozmiar CLOB na 3276700 i biorąc podciąg ze środka, zaczynając od 2475000 na długość 25000, otrzymuję:
+000000000 00:00:00.176883200 (VARCHAR2)
+000000000 00:00:02.069482600 (CLOB SUBSTR)
+000000000 00:00:00.175341500 (DBMS_LOB.SUBSTR)
(Pamiętaj, że zmiany dotyczą tylko dwóch ostatnich testów).
ORAZ... te same wyniki, inny dzień.
MMW.