sql >> Database >  >> RDS >> Mysql

Is het efficiënter om grote en kleine gerelateerde gegevens te scheiden in de kolom van een SQL-tabel?

VARCHAR wordt inline met de tabel opgeslagen. VARCHAR is sneller als de grootte redelijk is, waarvan de afweging sneller zou zijn, hangt af van uw gegevens en uw hardware, u zou een realistisch scenario met uw gegevens willen benchmarken.

Het effectieve maximale aantal bytes dat kan worden opgeslagen in een VARCHAR of VARBINARY kolom is onderhevig aan de maximale rijgrootte van 65,535 bytes , die door alle kolommen wordt gedeeld.

Bijvoorbeeld een VARCHAR(255) kolom kan een tekenreeks bevatten met een maximale lengte van 255 tekens. Ervan uitgaande dat de kolom de latin1-tekenset gebruikt (één byte per teken), is de werkelijke vereiste opslag de lengte van de tekenreeks (L), plus één byte om de lengte van de tekenreeks vast te leggen. Voor de string 'abcd' , L is 4 en de opslagvereiste is vijf bytes. Als dezelfde kolom in plaats daarvan is gedeclareerd om de ucs2 . te gebruiken dubbelbyte tekenset, de opslagvereiste is 10 bytes:de lengte van 'abcd' is acht bytes en de kolom vereist twee bytes om lengtes op te slaan omdat de maximale lengte groter is dan 255 (tot 510 bytes ).

Overweeg voor grotere gegevens TEXT . te gebruiken of BLOB . TEXT en BLOB kolommen zijn anders geïmplementeerd in de NDB opslagengine, waarbij elke rij in een TEXT kolom bestaat uit twee afzonderlijke delen. Een daarvan is van vaste grootte (256 bytes) , en wordt feitelijk opgeslagen in de originele tabel. De andere bestaat uit gegevens van meer dan 256 bytes , die is opgeslagen in een verborgen tabel. De rijen in deze tweede tabel zijn altijd 2,000 bytes lang. Dit betekent dat de grootte van een TEXT kolom is 256 if size <= 256 (waarbij grootte de grootte van de rij voorstelt); anders is de maat 256 + size + (2000 – (size – 256) % 2000) .

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

Hangt af van uw databaserelatie, of u die velden zelden gebruikt in query's. Bijvoorbeeld voor extra info. Een gescheiden tabel maken is een goede optie (normaliseren).

OPMERKINGEN: VARCHAR is anders met CHAR . Als u VARCHAR(250) . aanmaakt en voeg slechts 20 in tekens erop, dan duurt het 5 bytes + L anders met CHAR(250) , het duurt 250 bytes + L voor dezelfde conditie.



  1. een mysql-tabel maken vanuit een inner join

  2. Een database maken van een script in MySQL

  3. Wat is sneller SELECT * of SELECT `field` wanneer alleen `field` . vereist is

  4. Binaire gegevens niet correct opgeslagen in MySQL