MySQL のデータ型と選び方
MySQL のテーブル設計で最初に直面するのが、カラムごとのデータ型選定です。適切なデータ型を選ぶことで、ストレージ効率やクエリ性能が大きく変わります。
主なデータ型カテゴリ
MySQL のデータ型は大きく分けて、数値型・文字列型・日付時刻型・その他の4カテゴリに分類されます。
| カテゴリ | 代表的な型 | 用途 |
|---|---|---|
| 数値型 | INT, BIGINT, DECIMAL | ID、金額、数量 |
| 文字列型 | VARCHAR, TEXT, CHAR | 名前、説明、コード |
| 日付時刻型 | DATETIME, TIMESTAMP | 作成日、更新日 |
それぞれのカテゴリにはさらに細かい型が存在し、用途に応じて使い分ける必要があります。
データ型選定の基本方針
まず意識すべきなのは「必要十分な型を選ぶ」という原則です。大は小を兼ねるという考え方で BIGINT や TEXT を多用すると、インデックスサイズが膨らみ、クエリ性能が低下します。
ストレージ消費が少なく、インデックス効率が高い。メモリキャッシュにも多くのデータが乗るため、全体的なパフォーマンスが向上する。
ディスクとメモリの使用量が増え、バッファプールの効率が下がる。将来の拡張を見越して過剰に大きい型を選ぶのはアンチパターン。
たとえば、ステータスコードのように値の範囲が限られている場合は TINYINT(1バイト)で十分であり、INT(4バイト)を使う理由はありません。
よくある選定ミス
実務でありがちなのが、すべての整数カラムに INT を使ってしまうケースです。年齢や数量のように小さな値しか入らないカラムには SMALLINT や TINYINT が適しています。
浮動小数点型は丸め誤差が生じるため、金額の計算で不正確な結果になります。金額には必ず DECIMAL 型を使いましょう。
VARCHAR(255) は便利ですが、実際のデータ長に合わせて設定するのが望ましいです。インデックス作成時にバッファサイズに影響する場合があります。
NULL の扱い
データ型を決めるとき、NULL を許容するかどうかも設計の重要なポイントです。NULL はストレージ上の追加コストがわずかにあり、比較演算の際に三値論理が発生するため、意図しないバグの原因にもなります。明確なデフォルト値が存在するカラムには NOT NULL と DEFAULT を設定しておくのが安全です。
型選定はテーブル設計の土台であり、あとから変更するとデータ移行やアプリケーション改修のコストが発生します。最初の段階で要件をしっかり把握し、適切な型を選ぶことが重要です。











