sql >> Base de Datos >  >> RDS >> Oracle

Rendimiento de SUBSTR en CLOB

(Mentiras, malditas mentiras y puntos de referencia...)

Volví a ejecutar su prueba 10 veces, expandí la cadena para que tuviera 30 caracteres completos y obtuve los siguientes resultados promedio:

+000000000 00:00:00.011694200 (VARCHAR2)
+000000000 00:00:00.901000600 (CLOB SUBSTR)
+000000000 00:00:00.013169200 (DBMS_LOB.SUBSTR)

Luego cambié el rango de la subcadena a 5,14 (14,5 para DBMS_LOB.SUBSTR) y obtuve:

+000000000 00:00:00.011731000 (VARCHAR2)
+000000000 00:00:01.010840000 (CLOB SUBSTR)
+000000000 00:00:00.011427000 (DBMS_LOB.SUBSTR)

Luego cambié el rango a 17,14 (14,17 para DBMS_LOB.SUBSTR) y obtuve

+000000000 00:00:00.013578900 (VARCHAR2)
+000000000 00:00:00.964527400 (CLOB SUBSTR)
+000000000 00:00:00.011416800 (DBMS_LOB.SUBSTR)

Finalmente, cambié el rango a 25,14 (14,25 para DBMS_LOB.SUBSTR) y obtuve

+000000000 00:00:00.011210200 (VARCHAR2)
+000000000 00:00:00.916439800 (CLOB SUBSTR)
+000000000 00:00:00.013781300 (DBMS_LOB.SUBSTR)

Mi conclusión es que cuando se trabaja contra CLOB, es mejor usar DBMS_LOB.SUBSTR, ya que parece no tener una penalización de rendimiento en comparación con el uso de SUBSTR contra un VARCHAR2 "normal". SUBSTR contra un CLOB parece sufrir una penalización de rendimiento significativa. Para que conste:sistema operativo =HP/UX (variante de Unix), versión de Oracle =11.1, procesador =HP Itanium 2-plex. YMMV.

Comparte y disfruta.

Y como si vale la pena hacerlo, vale la pena hacerlo en exceso, aquí hay algunos resultados más con las cadenas expandidas a 32767 caracteres. Rangos de subcadenas proporcionados con cada conjunto de resultados:

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)

Mismo día, misma conclusión.

Cthulhu fhtagn.

(Una vez más a la brecha, queridos amigos, una vez más...)

Volví a ejecutar los puntos de referencia, cambiando el tamaño de CLOB a 3276700 y tomando la subcadena del medio que comienza en 2475000 para una longitud de 25000, obtengo:

+000000000 00:00:00.176883200 (VARCHAR2)
+000000000 00:00:02.069482600 (CLOB SUBSTR)
+000000000 00:00:00.175341500 (DBMS_LOB.SUBSTR)

(Tenga en cuenta que los cambios solo afectan a las dos últimas pruebas).

Y... mismos resultados, diferente día.

YMMV.