Hva er den øvre grensen for antall poster i en MySQL-databasetabell? Jeg lurer på noe om autoincrement-feltet. Hva vil skje hvis jeg legger til millioner av poster? Hvordan håndterer jeg slike situasjoner? Tusen takk!
Den største verdien av et heltall har lite å gjøre med det maksimale antallet rader du kan lagre i en tabell.
Det er riktig at hvis du bruker en int eller bigint som primærnøkkel, kan du bare ha like mange rader som antall unike verdier i datatypen til primærnøkkelen, men du trenger ikke å gjøre primærnøkkelen til et heltall, du kan gjøre den til en CHAR(100). Du kan også deklarere primærnøkkelen over mer enn én kolonne.
Det finnes andre begrensninger på tabellstørrelsen enn antall rader. Du kan for eksempel bruke et operativsystem som har en filstørrelsesbegrensning. Eller du kan ha en harddisk på 300 GB som bare kan lagre 300 millioner rader hvis hver rad er 1 kB stor.
Grensene for databasestørrelse er virkelig høye:
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
MyISAM-lagringsmotoren støtter 232 rader per tabell, men du kan bygge MySQL med alternativet --with-big-tables
for å få den til å støtte opptil 264 rader per tabell.
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
InnoDB-lagringsmotoren ser ikke ut til å ha noen grense for antall rader, men den har en grense for tabellstørrelse på 64 terabyte. Hvor mange rader som får plass, avhenger av størrelsen på hver enkelt rad.
mysql int-typer kan ta ganske mange rader: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
største verdi for unsigned int
er 4 294 967 295
.
unsigned bigint
største verdi er 18 446 744 073 709 551 615
.
Det finnes ingen begrensning. Det avhenger bare av ledig minne og systemets maksimale filstørrelse. Men det betyr ikke at du ikke bør ta forholdsregler for å håndtere minneforbruket i databasen. Lag alltid et skript som kan slette rader som ikke er i bruk, eller som holder det totale antallet rader innenfor et bestemt antall, for eksempel tusen.