格納しうるすべての値を正しく保持できる最小の型を選びます。適切な型はディスクを節約し、インデックスを小さくし、気づかないうちに起こるデータ破損を防ぎます。
格納しうるすべての値を正しく保持できる最小の型を選びます。適切な型はディスクを節約し、インデックスを小さくし、気づかないうちに起こるデータ破損を防ぎます。
INT(4バイト)。約21億を本当に超える場合にのみBIGINT(8バイト)。DECIMAL(10,2)。FLOAT/DOUBLEは絶対に使わない。これらは2進数で丸められ、セント(端数)を失います。VARCHAR(n)。nは上限であり、使った分だけ格納されます。TEXT。ページ外に格納され、デフォルト値を持てません。フィルタ条件に使う短い値には使わないでください。DATETIME(タイムゾーンなし、8バイト)とTIMESTAMP(UTC変換、4バイト、約2038年の上限あり)の対比。CREATE TABLE payments (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
amount DECIMAL(10,2) NOT NULL, -- exact money, not FLOAT
currency CHAR(3) NOT NULL, -- always 3 chars -> fixed CHAR
note VARCHAR(255), -- bounded, indexable
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Pitfall: the default SQL mode rejects bad values (good) --
INSERT INTO payments (amount) VALUES ('abc'); -- ERROR 1366, not silently 0
FLOATを使う。VARCHAR(255)を使う。過大なキーはインデックスを肥大化させます。UNSIGNEDを付け忘れる(正の範囲が2倍になります)。データ型は、下せる中で最も低コストな正しさとパフォーマンスの判断であり、後から変えるのが最も難しいものでもあります。狭く正確な型はインデックスを小さく保ち、不正なデータが本番のバグになる前に入口で食い止めます。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する