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

MySQL 磁碟空間優化:表結構、存儲與維護四大維度建議

     編輯:MySQL 資料庫相關知識

表結構設計層面

檢查點優化原則典型錯誤案例
字元集最小化Latin1 > GBK > UTF8/UTF8MB4純 ASCII 業務用 UTF8MB4
索引濫用僅建必要索引,利用前綴索引狀態欄位(如 0/1)建索引、重複索引
冗餘欄位正規化拆分,避免大字段重複多表存相同 JSON/文本
欄位類型過大TINYINT > SMALLINT > INT > BIGINT枚舉值用 VARCHAR(20)
主鍵選擇自增 BIGINT,避免業務鍵/組合鍵UUID、長字串、複合主鍵

反面教材:class_meta 表結構分析

CREATE TABLE class_meta (
  class_name VARCHAR(128) PRIMARY KEY,
  class_desc VARCHAR(2048),
  class_status CHAR(20) DEFAULT 'test1',
  UNIQUE KEY cm_cn_uk (class_name),          -- 與 PK 重複
  KEY cm_cd_ind (class_desc(767)),           -- 描述欄位無需索引
  KEY cm_cs_ind (class_status),              -- 低基數欄位無效
  KEY cm_cdcn_ind (class_desc(767),class_name) -- 與 cm_cd_ind 重複
) ENGINE=InnoDB CHARSET=latin1;

問題:主鍵+唯一索引重複、低選擇性索引、大字段索引、主鍵非自增。

存儲內容層面

  • ❌ 圖片/視頻/音頻存 BLOB/TEXT
  • ✅ 僅存儲對象存儲路徑(S3/OSS/CDN URL)

資料保留層面

  • 定期歸檔/刪除過期資料(分區表、pt-archiver)
  • 避免「軟刪除」積壓,定期硬刪或移冷表

後期維護層面

  • OPTIMIZE TABLE 整理碎片(InnoDB 實為 ALTER TABLE ... ENGINE=InnoDB)
  • 頻繁 DELETE/UPDATE 表需排程維護

進階建議:壓縮表

  • 適用:低並發、讀多寫少、歷史歸檔表
  • ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8
  • 壓縮率 30%-70%,CPU 換 I/O,需壓測驗證

空間節省試算

5 億行表,單行從 100 字節降至 60 字節 → 節省 約 18 GB(未含索引)。「斤斤計較」在 TB/PB 級極具價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved