許多開發者視資料庫三範式為聖經,實則在大數據量、高併發場景下,嚴格遵循三範式反而會拖垮效能。MySQL 採行式儲存,減少單行大小 → 單頁容納更多行 → 減少 IO → 提升快取命中率。本文分享實戰驗證的表結構優化技巧。
BIGINT 儲存。TINYINT(1B) SMALLINT(2B) MEDIUMINT(3B) INT(4B) BIGINT(8B),按業務上限選最小型別。VARCHAR(11) 而非 255)。ENUM:單選狀態,1-2 bytes,新增值只需 ALTER TABLE ... ADD VALUE 不重建表。SET:多選屬性,位元運算極快,同樣節省空間。圖片、文件、大文本交給對象儲存(S3、MinIO、FastDFS),資料庫只存路徑。讓專業工具做專業的事。
latin1,節省 50%+ 空間。含 TEXT/大 VARCHAR 欄位且高頻查詢不需該欄位時,拆至獨立表(一對一關聯)。
description、用戶表拆出 profile_json。場景:頻繁 JOIN 兩張大表只為取一個小欄位(如訂單列表顯示用戶姓名)。
user_name 至訂單表,以空間換時間,消除 JOIN IO。IS NULL/IS NOT NULL 優化困難,DEFAULT '' 或 0 更友善。表結構優化核心是「縮小行長 → 減少 IO → 提升快取」,偶需「適度冗余換 JOIN 效能」。沒有銀彈,只有基於業務場景的取捨。