sql >> Database >  >> RDS >> Mysql

char vs varchar voor prestaties in voorraaddatabase

In MyISAM is er enig voordeel bij het maken van records met een vaste breedte. VARCHAR is variabele breedte. CHAR heeft een vaste breedte. Als uw rijen alleen gegevenstypen met een vaste breedte hebben, heeft de hele rij een vaste breedte en krijgt MySQL enig voordeel bij het berekenen van de benodigde ruimte en de offset van rijen in die tabel. Dat gezegd hebbende, het voordeel kan klein zijn en het is nauwelijks een mogelijke kleine winst waard die opweegt tegen andere kosten (zoals cache-efficiëntie) van het hebben van opgevulde CHAR-kolommen met vaste breedte waar VARCHAR compacter zou worden opgeslagen.

Het breekpunt waar het efficiënter wordt, hangt af van uw toepassing, en dit is niet iets dat kan worden beantwoord, behalve door beide oplossingen te testen en degene te gebruiken die het beste werkt voor uw gegevens onder het gebruik van uw toepassing.

Wat betreft INT(7) versus INT(11), dit is niet relevant voor opslag of prestaties. Het is een veelvoorkomend misverstand dat MySQL's argument voor het INT-type iets te maken heeft met de grootte van de gegevens -- dat is niet zo. Het INT-gegevenstype van MySQL is altijd 32 bits. Het argument tussen haakjes verwijst naar het aantal cijfers dat moet worden ingevuld als u de waarde weergeeft met ZEROFILL. bijv. INT(7) geeft 0001234 weer waar INT(11) 00000001234 weergeeft. Maar deze opvulling gebeurt alleen als de waarde wordt weergegeven, niet tijdens opslag of wiskundige berekening.



  1. Kunt u binnen één instructie toegang krijgen tot de waarde voor automatisch verhogen in MySQL?

  2. PHP &MySQL:Opgeslagen TIMESTAMP converteren naar de lokale tijdzone van de gebruiker

  3. trigger toevoegen aan elke tabel in mijn H2-database

  4. Hoe controleer je welke functie een type gebruikt?