sql >> Databáze >  >> RDS >> Oracle

Vystoupení SUBSTR na CLOB

(Lži, sakra lži a benchmarky...)

Zopakoval jsem váš test 10krát, rozšířil jsem řetězec tak, aby měl celých 30 znaků, a získal jsem následující průměrné výsledky:

+000000000 00:00:00.011694200 (VARCHAR2)+000000000 00:00:00.901000600 (CLOB SUBSTR)+000000000 (00:0000000 00:00:0000 00:00:00000 00:00:00000 00:00:00000 00:031690.0)D_code>DSTR. 

Pak jsem změnil rozsah podřetězců na 5,14 (14,5 pro DBMS_LOB.SUBSTR) a dostal jsem:

+000000000 00:00:00.011731000 (VARCHAR2)+000000000 00:00:01.010840000 (CLOB SUBSTR)+000000000 (00:0000000 00:0000000 00:00:270.0) SUBcode>DLOMS 00:00:270.0 

Pak jsem změnil rozsah na 17,14 (14,17 pro DBMS_LOB.SUBSTR) a mám

+000000000 00:00:00.013578900 (VARCHAR2)+000000000 00:00:00.964527400 (CLOB SUBSTR)+000000000 (00:0000000 00:00:00000 00:00:00000 00:00:00000 00:00000000 00:00:000.0) SUBcode>00:014160.0 

Nakonec jsem změnil rozsah na 25,14 (14,25 pro DBMS_LOB.SUBSTR) a dostal

+000000000 00:00:00.011210200 (VARCHAR2)+000000000 00:00:00.916439800 (CLOB SUBSTR)+000000000 (00:0000000 00:00:0000 00:0000000 00:00:0000 00:00:0000 00:0000000 00:0000000 00:00:000.0.0D 

Můj závěr je, že když pracujete proti CLOB's, je nejlepší použít DBMS_LOB.SUBSTR, protože se zdá, že ve srovnání s použitím SUBSTR proti "normálnímu" VARCHAR2 nemá žádnou výkonnostní penalizaci. Zdá se, že SUBSTR proti CLOB trpí značnou výkonnostní penalizací. Pro pořádek - OS =HP/UX (varianta Unix), verze Oracle=11.1, procesor=HP Itanium 2-plex. YMMV.

Sdílejte a užívejte si.

A protože pokud to stojí za to udělat, stojí za to to přehánět, zde jsou některé další výsledky s řetězci rozšířenými na 32767 znaků. Rozsahy podřetězců uvedené u každé sady výsledků:

1, 25000+000000000 00:00:00.198466400 (Varchar2) +000000 000 00:00:02,870958700 (CLOB substr) +0000000 00:00:00.174490100 (DBMS_LOB.SUBSTR) 1000, 25000+ :00.253447900 (Varchar2) +000000000 00:00:02.491790500 (CLOB substr) +0000000 00:00:00.193560100 (DBMS_LOB.SUBSTR) 10000, 25000+00 0000:0000:00002 000 (VARITHR2) +00:2) +00:2) 0000:00:217812 000 (DBMS_LOB.SUBSTR) 10000:00:00:00:00:00:00:00:SUBSTR)+000000000 00:00:00.222200200 (DBMS_LOB.SUBSTR)

Stejný den, stejný závěr.

Cthulhu fhtagn.

(Ještě jednou k porušení, drazí přátelé, ještě jednou...)

Znovu spusťte benchmarky, změňte velikost CLOB na 3276700 a vezměte podřetězec od středu počínaje 2475000 pro délku 25000, což dostávám:

+000000000 00:00:00,176883200 (VARCHAR2)+000000000 00:00:02.069482600 (CLOB SUBSTR)+000000000 (00:0000000 00:00000000 00:00000000 00:00000000 00:00000000 00:00000000 00:00000000 00:00000000 00:00000000 00:00:03410.1. 

(Všimněte si, že změny ovlivní pouze poslední dva testy).

A...stejné výsledky, jiný den.

YMMV.



  1. Postgres UNIQUE CONSTRAINT pro pole

  2. Přístup odepřen uživateli „[email protected]“ (s použitím hesla:NE)

  3. Nadměrná aktivita MySQL

  4. Více o zavedení časových pásem v dlouhodobém projektu