sql >> Database teknologi >  >> RDS >> Oracle

Virkningen af ​​at definere VARCHAR2-søjle med større længde

Svaret afhænger af, om du taler om en kolonne i en databasetabel eller en variabel i et PL/SQL-program.

Databasekolonne

Mængden af ​​brugt lager er proportional med størrelsen af ​​de lagrede data.

PL/SQL-variabel

Hvis variablen er deklareret med en størrelse 1 til 4000 (11g+) / 1999 (10g eller tidligere), vil hukommelsen blive allokeret til den maksimale længde (dvs. VARCHAR2(100) vil kræve mindst 100 bytes hukommelse).

Hvis variablen er deklareret med en størrelse 4001 (11g+) / 2000 (10g eller tidligere) eller større, vil hukommelsen blive allokeret i henhold til størrelsen af ​​de lagrede data. (et interessant sidespørgsmål ville være, hvis variablens værdi ændres, hvordan ændres størrelsen på hukommelsen - omallokerer den en anden buffer med den nye størrelse?)

Reference for 10g:PL/SQL-datatyper

Små VARCHAR2-variabler er optimeret til ydeevne, og større er optimeret til effektiv hukommelsesbrug. Afskæringspunktet er 2000 bytes. For en VARCHAR2, der er 2000 bytes eller længere, tildeler PL/SQL dynamisk kun nok hukommelse til at holde den faktiske værdi. For en VARCHAR2-variabel, der er kortere end 2000 bytes, præallokerer PL/SQL den fulde deklarerede længde af variablen. Hvis du f.eks. tildeler den samme 500-byte-værdi til en VARCHAR2(2000 BYTE)-variabel og til en VARCHAR2(1999 BYTE)-variabel, fylder førstnævnte 500 bytes, og sidstnævnte optager 1999 bytes.

Reference til 11g:Undgå hukommelsesomkostninger i PL/SQL-kode

Angiv en størrelse på mere end 4000 tegn for VARCHAR2-variablen; PL/SQL venter, indtil du tildeler variablen, og tildeler derefter kun så meget lagerplads, som nødvendigt



  1. Hvordan MOD() virker i MariaDB

  2. Oracle SQL PIVOT-tabel

  3. Hvorfor Mysql's Group By og Oracle's Group by adfærd er forskellige

  4. Top-N-forespørgsler og sideinddeling i Oracle