sql >> Databasteknik >  >> RDS >> Mysql

Är det mer effektivt att separera stora och små relaterade data i en SQL-tabells kolumn?

VARCHAR lagras i linje med tabellen. VARCHAR är snabbare när storleken är rimlig, vars avvägning skulle vara snabbare beror på din data och din hårdvara, du skulle vilja jämföra ett verkligt scenario med dina data.

Det effektiva maximala antalet byte som kan lagras i en VARCHAR eller VARBINARY kolumnen är föremål för den maximala radstorleken på 65,535 bytes , som delas mellan alla kolumner.

Till exempel en VARCHAR(255) kolumn kan innehålla en sträng med en maximal längd på 255 tecken. Om vi ​​antar att kolumnen använder teckenuppsättningen latin1 (en byte per tecken), är den faktiska lagringen som krävs längden på strängen (L), plus en byte för att registrera längden på strängen. För strängen 'abcd' , L är 4 och lagringskravet är fem byte. Om samma kolumn istället deklareras att använda ucs2 dubbelbyte teckenuppsättning, lagringskravet är 10 byte:Längden på 'abcd' är åtta byte och kolumnen kräver två byte för att lagra längder eftersom den maximala längden är större än 255 (upp till 510 bytes ).

För större data, överväg att använda TEXT eller BLOB . TEXT och BLOB kolumner implementeras på olika sätt i NDB lagringsmotor, där varje rad i en TEXT kolumnen består av två separata delar. En av dessa är av fast storlek (256 bytes) , och lagras faktiskt i den ursprungliga tabellen. Den andra består av all data som överstiger 256 bytes , som lagras i en dold tabell. Raderna i denna andra tabell är alltid 2,000 bytes lång. Detta betyder att storleken på en TEXT kolumnen är 256 om size <= 256 (där storlek representerar storleken på raden); annars är storleken 256 + size + (2000 – (size – 256) % 2000) .

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

Beror på din databasrelation, om du sällan använder de fälten i frågan. Till exempel för ytterligare information. Skapa separerad tabell är bra alternativ (normalisera).

ANMÄRKNINGAR: VARCHAR är annorlunda med CHAR . Om du skapar VARCHAR(250) och infoga bara 20 tecken på den så tar den 5 bytes + L annorlunda med CHAR(250) , kommer det att ta 250 bytes + L för samma skick.



  1. Direkt åtkomst till serverdatabasen via Ajax (utan PHP eller någon annan mellanliggande)

  2. Enkelt exempel på många-till-många-relation med Sequelize

  3. Varför är UNION-frågor så långsamma i MySQL?

  4. Vilka privilegier krävs i MySQL för att exekvera en trigger?