sql >> Databasteknik >  >> RDS >> Mysql

char vs varchar för prestanda i lagerdatabas

I MyISAM finns det en viss fördel med att göra poster med fast bredd. VARCHAR är variabel bredd. CHAR är fast bredd. Om dina rader endast har datatyper med fast bredd, är hela raden fast bredd, och MySQL får en viss fördel genom att beräkna utrymmeskraven och förskjutningen av rader i den tabellen. Som sagt, fördelen kan vara liten och det är knappast värt en möjlig liten vinst som uppvägs av andra kostnader (som cacheeffektivitet) från att ha vadderade CHAR-kolumner med fast bredd där VARCHAR skulle lagra mer kompakt.

Brytpunkten där det blir mer effektivt beror på din applikation, och detta är inget som kan besvaras förutom genom att du testar båda lösningarna och använder den som fungerar bäst för din data under din applikations användning.

När det gäller INT(7) kontra INT(11) är detta irrelevant för lagring eller prestanda. Det är ett vanligt missförstånd att MySQL:s argument till INT-typen har något att göra med storleken på data - det gör det inte. MySQL:s INT-datatyp är alltid 32 bitar. Argumentet inom parentes hänvisar till hur många siffror som ska fyllas i om du visar värdet med ZEROFILL. T.ex. INT(7) visar 0001234 där INT(11) visar 00000001234. Men denna utfyllnad sker bara när värdet visas, inte under lagring eller matematisk beräkning.



  1. Skapa en tabell med komprimering i SQL Server (T-SQL)

  2. Vad betyder det att använda parenteser med ett OR i SQL?

  3. Hur kan jag skriva ut SQL-frågan som körs efter att Perls DBI har fyllt i platshållarna?

  4. MySQL:Välj rader med mer än en förekomst