255を超えたらどうする?MySQLのTINYINTとSMALLINTの使い分けガイド

tiny_int small_int mysql SQL
この記事は約3分で読めます。

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

tiny_int small_int mysql

MySQLを使ってテーブル設計をしていると、カラムにどの型を指定すべきか迷うことがあります。特に、TINYINTSMALLINTはどちらも比較的コンパクトな整数型ですが、適切に使い分けることでデータベースのパフォーマンスや保守性に大きな差が出ることをご存じでしょうか?

この記事では、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,535SMALLINT UNSIGNED
会員ランク1〒20TINYINT
ユーザーID数千以上SMALLINT以上(場合によってはINT)

予想以上に値が増えた場合に型変更をするのは、運用上大きなリスクや手間を伴います。将来の拡張性を見越して適切な型を選ぶことが重要です。

SMALLINTを選んでも問題ない?

よく「ストレージ節約のため、可能な限りTINYINTを使うべきでは?」と思われることもあります。しかし、実際には、現代のストレージ容量やネットワーク帯域を考えると、TINYINTとSMALLINTの1バイト差がシステム全体に与える影響は非常に小さいです。

そのため、

  • 値の増加が予想される場合
  • 255を超える可能性が少しでもある場合

には、最初から余裕を持ってSMALLINTを選んだほうが、結果的にシステムの寿命を延ばすことにつながります。

まとめ

  • TINYINT UNSIGNEDは0〜255まで格納できる
  • SMALLINT UNSIGNEDは0〜65,535まで格納できる
  • 255を超える可能性があるならSMALLINTを選ぶべき
  • ストレージ節約のために無理にTINYINTを選ぶ必要はない

設計段階で適切なデータ型を選ぶことは、パフォーマンス最適化や将来のメンテナンス性向上にもつながります。

データ量や運用コストを冷静に見極め、スマートに型選択をしていきましょう

クリックしたら、
楽天モバイル大盤振る舞いのキャンペーン中らしいです (本ブログ管理人は楽天モバイル2台持ちです) 楽天モバイル
SQL
daigoroをフォローする

コメント

タイトルとURLをコピーしました