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

資料庫欄位型別選型指南:效能、儲存與擴展性的平衡藝術

     編輯:MySQL 資料庫相關知識

決策維度

  1. 資料型態:數值、字串、日期、二進位、JSON
  2. 取值範圍:最小/最大值、精度需求
  3. 效能考量:數值運算 > 字串比較;小型別 > 大型別
  4. 儲存效率:固定長 vs 可變長、壓縮、碎片管理
  5. 索引友善:可索引、前綴索引、覆蓋索引
  6. 業務語意:NOT NULL、ENUM、CHECK 約束

數值型別選型表

字串型別選型

型別位元組範圍適用場景
TINYINT1-128~127 / 0~255布林、狀態碼、小計數
SMALLINT2-32k~32k / 0~65k中等計數、年齡
MEDIUMINT3-8M~8M / 0~16M較大計數、節省空間
INT4-21億~21億 / 0~42億通用主鍵、外鍵、計數
BIGINT8±9×10¹⁸巨大主鍵、時間戳毫秒、ID 生成器
DECIMAL(p,s)變長精確十進位金額、匯率、精密測量
FLOAT4~7 位有效數字科學計算、非精確容差
DOUBLE8~15 位有效數字高精度科學計算
型別最大長度儲存方式適用場景
CHAR(n)255固定長,右填空格定長代碼(ISO 國家碼、MD5 雜湊)
VARCHAR(n)65,535可變長,1-2 位元組長度前綴通用變長字串、姓名、標題
TEXT64KB溢位頁儲存長文本、描述、日誌
MEDIUMTEXT16MB溢位頁文章內容、JSON 文檔
LONGTEXT4GB溢位頁巨大文檔、完整日誌

引擎差異影響

  • MyISAM:固定長(CHAR)效能優於 VARCHAR,易定位列位置
  • InnoDB:兩者同樣溢位頁機制,VARCHAR 因佔用較小反而更快
  • BDB:差異不明顯

特殊型別技巧

  • ENUM:內部儲存為整數,查詢極快,適合狀態、類型等固定集合
  • BIT:位元組級標誌位,BIT(1) 替代 TINYINT(1)
  • JSON (5.7+):結構化文檔,支援索引虛擬欄位
  • 空間型別:GIS 應用專用

NOT NULL 與預設值

  • 明確宣告 NOT NULL:優化器可跳過 NULL 檢查、索引統計更準確
  • 設定合理 DEFAULT:減少應用層判斷、避免隱式 NULL 插入

避坑清單

  1. 用 INT(11) 以為限制長度 —— 顯示寬度無實際約束
  2. 金額用 FLOAT/DOUBLE 導致精度丟失 —— 必須 DECIMAL(19,4)
  3. VARCHAR(255) 濫用 —— 依實際最大長度設定,利於索引與記憶體
  4. 大量 NULL 可變長欄位產生碎片 —— 定期 OPTIMIZE TABLE 或改固定長
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved