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

MySQL 表結構優化:資料類型收斂、縱向/橫向拆分、逆範式化與冗餘統計表實戰

     編輯:MySQL 資料庫相關知識

1. 資料類型收斂:PROCEDURE ANALYSE()


SELECT * FROM tbl_name PROCEDURE ANALYSE();
SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);  -- 忽略值>16或長度>256的ENUM建議
  • 根據實際資料分布建議最佳類型(如 VARCHAR(200) 實際只存 20 字元 → 建議 VARCHAR(20))。
  • 結合業務預留冗餘,避免過度收斂導致未來擴充困難。

2. 縱向拆分

  • 將高頻訪問欄位(且盡量定長)與低頻/大欄位(TEXT、BLOB)分離為兩表,1:1 關聯。
  • 高頻表行長固定 → 查詢/更新極快;低頻表僅按需 JOIN。
  • 適用 MyISAM,InnoDB 亦受益於減少頁分裂與緩衝池浪費。

3. 橫向拆分

  • 按業務維度(時間、地區、租戶)將資料分散至多表或分區。
  • 降低單表大小,減少 MyISAM 表鎖爭用;InnoDB 減少 B-tree 深度。
  • MySQL 5.1+ 原生支援 Partitioning。

4. 逆範式化

  • 為高頻查詢引入冗餘欄位,避免多表 JOIN。
  • 代價:寫入成本略增、一致性維護複雜化。
  • 適用:查詢極多、更新較少、容忍最終一致性的場景(如報表、緩存表)。

5. 冗餘統計表 / 臨時表

  • CREATE TEMPORARY TABLE:Session 級、記憶體存儲、斷開自動清理。
  • 大表統計分析:先 INSERT ... SELECT 導入臨時表,再對臨時表聚合,避免鎖定大表、佔用緩衝池。

6. 選擇合適引擎

場景建議引擎理由
嚴重鎖衝突InnoDB行鎖減少衝突
查詢多、事務要求低MyISAM全表鎖但查詢快、壓縮表支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved