Oracle
 sql >> база данни >  >> RDS >> Oracle

Изпълнение на SUBSTR на CLOB

(Лъжи, по дяволите лъжи и показатели...)

Проведох отново вашия тест 10 пъти, разширявайки низа, така че да е дълъг цели 30 знака и получих следните осреднени резултати:

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

След това промених диапазона на поднизовете на 5,14 (14,5 за DBMS_LOB.SUBSTR) и получих:

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

След това промених диапазона на 17,14 (14,17 за DBMS_LOB.SUBSTR) и получих

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

Накрая промених диапазона на 25,14 (14,25 за DBMS_LOB.SUBSTR) и получих

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

Моето заключение е, че когато се работи срещу CLOB, най-добре е да се използва DBMS_LOB.SUBSTR, тъй като изглежда, че на практика няма намаление на производителността в сравнение с използването на SUBSTR срещу "нормален" VARCHAR2. SUBSTR срещу CLOB изглежда страда от значително намаление на производителността. За протокола - OS =HP/UX (Unix вариант), Oracle версия=11.1, процесор=HP Itanium 2-plex. YMMV.

Споделете и се насладете.

И тъй като ако си струва да се направи, си струва да се прекалява, ето още няколко резултата с низовете, разширени до 32767 знака. Диапазони на поднизове, дадени с всеки набор от резултати:

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)

Същият ден, същото заключение.

Cthulhu fhtagn.

(Още веднъж за пробив, скъпи приятели, още веднъж...)

Стартирайте отново бенчмарковете, променяйки размера на CLOB на 3276700 и вземайки подниза от средата, започвайки от 2475000 за дължина 25000, получавам:

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

(Обърнете внимание, че промените засягат само последните два теста).

И...същите резултати, различен ден.

YMMV.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Почистване на колона за дата на Oracle

  2. Как да форматирате числа със знак минус/плюс в Oracle

  3. SQLDeveloper не показва таблици под връзки, където пише таблици

  4. Попълване на стойността на показвания елемент при заявка във формуляри на Oracle

  5. Динамичен SQL LOOP