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.