この記事の最終更新日: 2025年4月30日

MySQLを使ってテーブル設計をしていると、カラムにどの型を指定すべきか迷うことがあります。特に、TINYINT
とSMALLINT
はどちらも比較的コンパクトな整数型ですが、適切に使い分けることでデータベースのパフォーマンスや保守性に大きな差が出ることをご存じでしょうか?
この記事では、TINYINTとSMALLINTの違い、それぞれの格納できる数値範囲、具体的な使い分け方について、スマートかつ丁寧に解説していきます。
TINYINTとは?
TINYINT
は、MySQLにおける最小サイズの整数型です。1バイト(8ビット)で表現され、以下の範囲の値を格納できます。
- TINYINT(符号あり): -128 〜 127
- TINYINT UNSIGNED(符号なし): 0 〜 255
特徴
- ストレージが非常に小さい(1バイト)
- 範囲が限られているため、用途は絞られる
- フラグ管理(ON/OFF)や、小さなID、レベル設定などに最適
たとえば、ステータスを「有効(1)」・「無効(0)」で管理したり、月を表す(1〜12)場合などに非常に適しています。
SMALLINTとは?
SMALLINT
は、2バイト(16ビット)で表現される整数型です。格納できる数値範囲は以下の通りです。
- SMALLINT(符号あり): -32,768 〜 32,767
- SMALLINT UNSIGNED(符号なし): 0 〜 65,535
特徴
- TINYINTに比べて格納できる値の範囲が広い
- 2バイトで扱えるため、そこまでストレージ負荷は高くない
- より幅広いID管理や数量管理に向いている
たとえば、商品在庫数、ユーザーID、郵便番号など、255を超える可能性がある項目に対して適しています。
255を超えたらどうする?
設計時点でカラムの最大値が255を超える可能性がある場合は、迷わずTINYINTではなくSMALLINTを選びましょう。
具体例
項目 | 期待値の範囲 | 適切な型 |
---|---|---|
都道府県コード | 1〒200程度 | TINYINT |
商品在庫数 | 0〒65,535 | SMALLINT UNSIGNED |
会員ランク | 1〒20 | TINYINT |
ユーザーID | 数千以上 | SMALLINT以上(場合によってはINT) |
予想以上に値が増えた場合に型変更をするのは、運用上大きなリスクや手間を伴います。将来の拡張性を見越して適切な型を選ぶことが重要です。
SMALLINTを選んでも問題ない?
よく「ストレージ節約のため、可能な限りTINYINTを使うべきでは?」と思われることもあります。しかし、実際には、現代のストレージ容量やネットワーク帯域を考えると、TINYINTとSMALLINTの1バイト差がシステム全体に与える影響は非常に小さいです。
そのため、
- 値の増加が予想される場合
- 255を超える可能性が少しでもある場合
には、最初から余裕を持ってSMALLINT
を選んだほうが、結果的にシステムの寿命を延ばすことにつながります。
まとめ
- TINYINT UNSIGNEDは0〜255まで格納できる
- SMALLINT UNSIGNEDは0〜65,535まで格納できる
- 255を超える可能性があるならSMALLINTを選ぶべき
- ストレージ節約のために無理にTINYINTを選ぶ必要はない
設計段階で適切なデータ型を選ぶことは、パフォーマンス最適化や将来のメンテナンス性向上にもつながります。
データ量や運用コストを冷静に見極め、スマートに型選択をしていきましょう

大阪のエンジニアが書いているブログ。
コメント