Odpowiadając na Twoje pytanie:tak, zmniejszy się wydajność. Oczywiście im większy typ, im większa tabela, tym wolniejsze zapytania (więcej I/O, większe indeksy, dłuższy czas dostępu, mniejsze prawdopodobieństwo zmieszczenia się w różnych pamięciach podręcznych itd.). Tak więc ogólna zasada:zawsze używaj najmniejszego typu który pasuje do Twoich potrzeb.
Biorąc to pod uwagę, wydajność nie ma znaczenia . Czemu? Ponieważ kiedy dojdziesz do punktu, w którym przepełnisz INT, wtedy BIGINT jest jedynym rozwiązaniem i będziesz musiał z tym żyć. Również w tym momencie (biorąc pod uwagę, że używasz automatycznego przyrostu PK, będziesz miał ponad 4 miliardy wierszy), będziesz mieć większe problemy z wydajnością, a koszt BIGINT w porównaniu z INT będzie najmniejszym z twoich zmartwień.
Rozważ więc następujące punkty:
- Użyj UNSIGNED, jeśli nie potrzebujesz wartości ujemnych, podwoi to limit.
- Maksymalna wartość UNSIGNED INT wynosi 4.294.967.295. Jeśli używasz automatycznego przyrostu PK i masz tylko 300 000 wpisów, naprawdę nie musisz się martwić . W tej chwili możesz nawet użyć MEDIUMINT, chyba że planujesz naprawdę szybki wzrost. (patrz http://dev.mysql.com/doc /refman/5.1/en/integer-types.html )
- Liczba w nawiasie po typie nie wpływa na maksymalną wartość typu . INT(7) jest tym samym co INT(8) lub INT(32). Jest używany do wskazania szerokości wyświetlania, jeśli określisz ZEROFILL (patrz http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html )