首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 數據類型優化:PROCEDURE ANALYSE() 實戰與 6 大微優化技巧

     編輯:MySQL 綜合教學

PROCEDURE ANALYSE() 自動分析列定義

語法:

SELECT * FROM tbl_name PROCEDURE ANALYSE();
SELECT * FROM tbl_name PROCEDURE ANALYSE(16, 256);  -- 忽略 >16 值或 >256 字節的 ENUM 建議

實戰輸出解讀

mysql> SELECT * FROM statistics_news_category_history PROCEDURE ANALYSE(9,256)\G

*************************** 1. row ***************************
Field_name: datacrawldb.statistics_news_category_history.id
Min_value: 26
Max_value: 30
Min_length: 2
Max_length: 2
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 28.0000
Std: 1.4142
Optimal_fieldtype: TINYINT(2) UNSIGNED NOT NULL   -- 建議:原 INT(10) → TINYINT

*************************** 2. row ***************************
Field_name: ...news_category
Min_value: bigdata
Max_value: test
Min_length: 4
Max_length: 10
Empties_or_zeros: 0
Nulls: 0
Avg_value_or_avg_length: 6.6000
Std: NULL
Optimal_fieldtype: ENUM('bigdata','cloud','datacenter','storage','test') NOT NULL  -- 建議:VARCHAR(20) → ENUM

*************************** 3. row ***************************
Field_name: ...news_num
Optimal_fieldtype: TINYINT(2) UNSIGNED NOT NULL   -- 原 INT(10)

*************************** 4. row ***************************
Field_name: ...news_date
Optimal_fieldtype: ENUM('2014-02-17') NOT NULL    -- 原 VARCHAR(10) 存日期

執行優化

ALTER TABLE statistics_news_category_history
  MODIFY id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
  MODIFY news_category ENUM('bigdata','cloud','datacenter','storage','test') NOT NULL,
  MODIFY news_num TINYINT(2) UNSIGNED NOT NULL,
  MODIFY news_date ENUM('2014-02-17') NOT NULL;

6 大微優化技巧

#技巧收益
1用正確類型,勿將數字存為字符串空間 -90%,比較快 10x
2選最小足夠類型:MEDIUMINT < INT < BIGINTMEDIUMINT 比 INT 省 25% 空間
3盡量 NOT NULL每列省 1 bit,索引更緊湊,查詢更快
4MyISAM 固定長度行(無 VARCHAR/TEXT/BLOB)讀取速度提升 20%~30%
5非多語言列用 latin1 而非 utf8utf8 佔 3 倍空間(email、URL、IP 等)
6ROW_FORMAT=FIXED 強制固定長度兼容 VARCHAR 同時享受固定行優勢

遷移風險提示

  • ENUM 修改值需 ALTER TABLE,高頻變更業務慎用;
  • TINYINT 範圍 -128~127(無符號 0~255),確認業務上限;
  • 生產環境先在備庫驗證 ALTER TABLE 鎖表時間,再主庫執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved