首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料型別選擇與建表策略:省空間、防失真、提效能的實戰心法

     編輯:MySQL 資料庫相關知識

無論是免費空間還是大型電商,合理的資料型別設計能節省儲存成本、避免精度陷阱、提升查詢效能。本文按類別深度解析 MySQL 常用型別選型原則。

一、數值型別:精打細算每個位元組

1. 定點數:DECIMAL / NUMERIC

  • 以字串形式儲存,每位數字(含小數點)佔 1 Byte。
  • 優點:精度固定、運算不失真,適合價格、金額、匯率等嚴禁四捨五入誤差的欄位。
  • 缺點:空間佔用大、運算較慢。

2. 浮點數:FLOAT(4 Byte) / DOUBLE(8 Byte)

  • 科學計算適用,極小值可達 1.17E-38 / 2.22E-308。
  • 民用系統極少需要此精度,一般業務不建議使用,避免 0.1+0.2≠0.3 等經典坑。

3. 整數:從 TINYINT 到 BIGINT

型別儲存無號最大值典型適用場景
TINYINT1 Byte255年齡、狀態碼、布林旗標
SMALLINT2 Bytes65,535遊戲技能值、小型編號
MEDIUMINT3 Bytes16,777,215千萬級自增 ID(省 1 Byte vs INT)
INT4 Bytes4,294,967,295通用自增 ID、外鍵
BIGINT8 Bytes1.84e19分布式 ID、極大計數器

原則:夠用就好,越小越好。千萬行表每行省 1 Byte = 省 10 MB 磁碟 + 記憶體緩存。

二、日期時間型別:按需選擇

型別範圍佔用適用場景
DATE1000-01-01 ~ 9999-12-313 Bytes生日、入職日、只需日期
TIME-838:59:59 ~ 838:59:593 Bytes上下班打卡、耗時統計
DATETIME1000-01-01 00:00:00 ~ 9999-12-31 23:59:598 Bytes訂單建立時間、日誌時間戳(不受時區影響)
TIMESTAMP1970-01-01 ~ 2038-01-194 Bytes自動更新的修改時間、跨時區應用
YEAR1901 ~ 21551 Byte年份欄位

只存日期用 DATE,別用 DATETIME 浪費 5 Bytes。

三、字串型別:固定 vs 變長的空間博弈

型別特性實際佔用選擇建議
CHAR(n)固定長度,右側空格補齊n Bytes長度固定或差異極小(如 MD5、股票代碼、國旗代碼)
VARCHAR(n)變長,+1/+2 Byte 記錄長度實際長度 + 1/2長度不固定(姓名、地址、標題)
TINYTEXT最大 255 字元L + 1短文本、標籤
TEXT最大 65,535L + 2文章內容、描述
MEDIUMTEXT最大 16,777,215L + 3長文本
LONGTEXT最大 4,294,967,295L + 4巨大文本、完整日誌

實戰案例:股票表

  • 股票名稱:多為 4 字(8 Bytes)→ CHAR(8) 最划算。
  • 股票代碼:滬市 6 碼、深市 4 碼。若用 VARCHAR(6),滬市佔 7 Bytes、深市佔 5 Bytes。因滬市數量較多,CHAR(6) 反而更省空間。

四、ENUM / SET:低基數枚舉的秘密武器

  • ENUM('male','female'):只能二選一,1~2 Bytes。比 TINYINT 更直觀,查詢可直接 WHERE sex='male'。
  • SET('read','write','exec'):可多選,1~8 Bytes。適合權限標籤、多屬性標記。

五、建表策略總結

  1. 整數優先用最小夠用型別,自增 ID 評估未來 3-5 年增長量選型。
  2. 金額務必用 DECIMAL(10,2) 或更高精度,嚴禁 FLOAT/DOUBLE。
  3. 字串按長度分布選 CHAR/VARCHAR,超過 100 字元改用 TEXT 系列。
  4. 低基數狀態欄位優先考慮 ENUM,可讀性與效能雙贏。
  5. 避免 SELECT *,只查需要欄位,減少 I/O 與網路傳輸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved