sql >> Database teknologi >  >> RDS >> Mysql

Er det mere effektivt at adskille store og små relaterede data i en SQL-tabels kolonne?

VARCHAR er gemt inline med bordet. VARCHAR er hurtigere, når størrelsen er rimelig, hvis afvejning ville være hurtigere afhænger af dine data og din hardware, du vil gerne benchmarke et virkelighedsscenario med dine data.

Det effektive maksimale antal bytes, der kan gemmes i en VARCHAR eller VARBINARY kolonne er underlagt den maksimale rækkestørrelse på 65.535 bytes , som er delt mellem alle kolonner.

For eksempel en VARCHAR(255) kolonne kan indeholde en streng med en maksimal længde på 255 tegn. Hvis vi antager, at kolonnen bruger latin1-tegnsættet (én byte pr. tegn), er den faktiske nødvendige lagring længden af ​​strengen (L), plus en byte til at registrere længden af ​​strengen. For strengen 'abcd' , L er 4 og lagerkravet er fem bytes. Hvis den samme kolonne i stedet erklæres for at bruge ucs2 dobbelt-byte tegnsæt, lagerkravet er 10 bytes:Længden af ​​'abcd' er otte bytes, og kolonnen kræver to bytes for at gemme længder, fordi den maksimale længde er større end 255 (op til 510 bytes ).

For større data kan du overveje at bruge TEXT eller BLOB . TEKST og BLOB kolonner er implementeret forskelligt i NDB lagermotor, hvor hver række i en TEXT kolonnen består af to separate dele. En af disse er af fast størrelse (256 bytes) , og er faktisk gemt i den originale tabel. Den anden består af alle data, der overstiger 256 bytes , som er gemt i et skjult bord. Rækkerne i denne anden tabel er altid 2.000 bytes lang. Det betyder, at størrelsen af ​​en TEXT kolonnen er 256 hvis størrelse <=256 (hvor størrelsen repræsenterer rækkens størrelse); ellers er størrelsen 256 + størrelse + (2000 – (størrelse – 256) % 2000) .

http://dev.mysql.com/doc/refman /5.6/da/storage-requirements.html

Afhænger af din databaserelation, hvis du sjældent bruger disse felter i forespørgslen. For eksempel for yderligere info. Opret adskilt tabel er gode muligheder (normalisere).

BEMÆRKNINGER: VARCHAR er anderledes med CHAR . Hvis du opretter VARCHAR(250) og indsæt kun 20 tegn på det, så vil det tage 5 bytes + L anderledes med CHAR(250) , vil det tage 250 bytes + L for samme tilstand.



  1. Bedste måde at fortælle, at 3 eller flere på hinanden følgende poster mangler

  2. Hvordan krypteres adgangskoden i Oracle?

  3. Sådan slutter du dig til MySQL og Postgres i en live materialiseret visning

  4. Understøtter PostgreSQL accentufølsomme sammenstillinger?