sql >> Databasteknik >  >> RDS >> Oracle

Effekten av att definiera VARCHAR2 kolumn med större längd

Svaret beror på om du pratar om en kolumn i en databastabell eller en variabel i ett PL/SQL-program.

Databaskolumn

Mängden lagring som används är proportionell mot storleken på lagrad data.

PL/SQL-variabel

Om variabeln deklareras med storleken 1 till 4000 (11g+) / 1999 (10g eller tidigare), kommer minne att tilldelas för den maximala längden (dvs. VARCHAR2(100) kommer att kräva minst 100 byte minne).

Om variabeln deklareras med storleken 4001 (11g+) / 2000 (10g eller tidigare) eller större, kommer minnet att tilldelas enligt storleken på lagrad data. (en intressant sidofråga skulle vara, om variabelns värde ändras, hur ändras storleken på minnet - omfördelar det en annan buffert med den nya storleken?)

Referens för 10g:PL/SQL-datatyper

Små VARCHAR2-variabler är optimerade för prestanda, och större är optimerade för effektiv minnesanvändning. Brytpunkten är 2000 byte. För en VARCHAR2 som är 2000 byte eller längre, allokerar PL/SQL dynamiskt endast tillräckligt med minne för att hålla det faktiska värdet. För en VARCHAR2-variabel som är kortare än 2000 byte, förallokerar PL/SQL variabelns fulla deklarerade längd. Om du till exempel tilldelar samma 500-byte-värde till en VARCHAR2(2000 BYTE)-variabel och till en VARCHAR2(1999 BYTE)-variabel, tar den förra upp 500 byte och den senare 1999 byte.

Referens för 11g:Undvik minneskostnader i PL/SQL-kod

Ange en storlek på mer än 4000 tecken för variabeln VARCHAR2; PL/SQL väntar tills du tilldelar variabeln och allokerar sedan bara så mycket lagringsutrymme som behövs



  1. Postgres:vakuumkommandot rensar inte upp döda tuplar

  2. Returnera rader som matchar element i inmatningsmatrisen i plpgsql-funktionen

  3. Viloläge UUID med PostgreSQL och SQL Server

  4. få JOIN-tabellen som en rad resultat med PostgreSQL/NodeJS