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

Dopad definice sloupce VARCHAR2 s větší délkou

Odpověď závisí na tom, zda mluvíte o sloupci v databázové tabulce nebo o proměnné v programu PL/SQL.

Sloupec databáze

Velikost použitého úložiště je úměrná velikosti uložených dat.

Proměnná PL/SQL

Pokud je proměnná deklarována s velikostí 1 až 4000 (11g+) / 1999 (10g nebo starší), paměť bude přidělena na maximální délku (tj. VARCHAR2(100) bude vyžadovat alespoň 100 bajtů paměti).

Pokud je proměnná deklarována s velikostí 4001 (11g+) / 2000 (10g nebo starší) nebo větší, bude paměť přidělena podle velikosti uložených dat. (zajímavá vedlejší otázka by byla, pokud se změní hodnota proměnné, jak se změní velikost paměti - přerozdělí to další vyrovnávací paměť s novou velikostí?)

Reference pro 10g:PL/SQL Datatypes

Malé proměnné VARCHAR2 jsou optimalizovány pro výkon a větší jsou optimalizovány pro efektivní využití paměti. Mezní bod je 2000 bajtů. Pro VARCHAR2, který má 2000 bajtů nebo více, PL/SQL dynamicky alokuje pouze dostatek paměti pro uložení skutečné hodnoty. Pro proměnnou VARCHAR2, která je kratší než 2000 bajtů, PL/SQL předem přidělí celou deklarovanou délku proměnné. Pokud například přiřadíte stejnou 500bajtovou hodnotu proměnné VARCHAR2(2000 BYTE) a proměnné VARCHAR2(1999 BYTE), první zabere 500 bajtů a druhá 1999 bajtů.

Referenční příručka pro 11g:Předcházení režii paměti v kódu PL/SQL

Zadejte velikost více více než 4000 znaků pro proměnnou VARCHAR2; PL/SQL čeká, dokud proměnnou nepřiřadíte, a poté přidělí pouze tolik úložiště, kolik je potřeba



  1. MySQL:Jak se připojím ke stejné tabulce vícekrát?

  2. Při výběru a zakódování základního 64 obrázku z databáze byla zjištěna pomalost

  3. Změna způsobu, jakým isql spouští SQL

  4. Oznámení ClusterControl 1.7.2:Vylepšené zálohování a podpora PostgreSQL pro TimescaleDB a MySQL 8.0