許多人採取「廚房下水道」式設計,把所有可能用到的欄位全存進表。以產品目錄為例:名稱、說明、尺寸、重量、價格是核心,但「稅額」與「運費」屬衍生資料,應在查詢或應用層即時計算。若稅率變動,更新每筆產品記錄極其痛苦;若不存,只需調整計算邏輯即可。
迷思破解:擔心日後加欄位困難?MySQL ALTER TABLE 可輕鬆新增欄位:
ALTER TABLE products ADD rank INTEGER;
開發初期常寫 SELECT * FROM sometable,隨資料增長會嚴重拖慢效能。應改為明確列出欄位:
SELECT name, rank, description FROM products;
維護性優於效能:程式碼應使用欄位名稱而非索引位置存取結果。欄位順序可能因 ALTER TABLE 或查詢重寫而改變,用名稱可透過 grep 快速定位修改處。
WHERE、JOIN、ORDER BY 常用欄位建立索引。TINYINT 1B、SMALLINT 2B、MEDIUMINT 3B、INT 4B、BIGINT 8B),百萬列可省 10MB+。CHAR,變長用 VARCHAR;超過 100 字元改用 TEXT 家族。DECIMAL 避免浮點誤差。WHERE YEAR(date_col) = 2024)會導致全表掃描,改用範圍查詢 WHERE date_col BETWEEN '2024-01-01' AND '2024-12-31'。%keyword)無法使用索引。WHERE varchar_col = 123 會使索引失效,確保比較值型別一致。高效能 MySQL 應用源於:精簡資料模型、精準查詢欄位、合理索引設計、避開優化器陷阱。開發早期養成習慣,上線後才不會因資料量暴增而崩潰。