For at besvare dit spørgsmål:ja, det bliver mindre effektivt. Det er klart, at jo større type, jo større tabel, jo langsommere forespørgsler (flere I/O, større indekser, længere adgangstid, resultatet er mindre sandsynligt, at det passer ind i de forskellige caches, og så videre). Så som en tommelfingerregel:brug altid den mindste type der passer til dit behov.
Når det er sagt, er ydeevnen ligegyldig . Hvorfor? For når du når et punkt, hvor du flyder over en INT, så er BIGINT den eneste løsning, og du bliver nødt til at leve med det. Også på det tidspunkt (i betragtning af at du bruger en automatisk stignings-PK, vil du være over 4 milliarder rækker), vil du have større præstationsproblemer, og overhead af en BIGINT sammenlignet med en INT vil være den mindste af dine bekymringer.
Så overvej følgende punkter:
- Brug UNSIGNED, hvis du ikke har brug for negative værdier, det vil fordoble grænsen.
- UNSIGNED INT maks. værdi er 4.294.967.295. Hvis du bruger en automatisk stignings-PK, og du kun har 300.000 poster, behøver du virkelig ikke bekymre dig . Du kan endda bruge en MEDIUMINT i øjeblikket, medmindre du planlægger en virkelig hurtig vækst. (se http://dev.mysql.com/doc /refman/5.1/da/integer-types.html )
- Tallet i parentes efter typen påvirker ikke typens maksimale værdi . INT(7) er det samme som INT(8) eller INT(32). Det bruges til at angive visningsbredden, hvis du angiver ZEROFILL (se http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html )