程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 幾個縮減MySQL以節儉磁盤空間的建議

幾個縮減MySQL以節儉磁盤空間的建議

編輯:MySQL綜合教程

幾個縮減MySQL以節儉磁盤空間的建議。本站提示廣大學習愛好者:(幾個縮減MySQL以節儉磁盤空間的建議)文章只能為提供參考,不一定能成為您想要的結果。以下是幾個縮減MySQL以節儉磁盤空間的建議正文


我們在任務中經常會碰到一些客戶的TPS\QPS都不太高,但磁盤占用異常年夜,一旦單實例空間太年夜,像內存、收集、CPU和備份都將增長響應的開支。能夠僅僅是因為空間不知足使得我們不能不停止擴容,上面的辦法供給給年夜家參考。有則改之無則加勉。
1、表構造設計上
1) 字符集能否遵守了最小化准繩?(能用latin的就不消gbk。能用gbk的就不消utf8)
2) 索引上能否有濫用?(基本不應用的字段建索引、不合適建索引的字段建索引、反復建索引或許不克不及很好的應用前綴索引等)
3) 冗余字段能否太多?(各表中不消的或許字段冗余太多)
4) 不准確的字段類型?(能用1個字節非要用幾個字節,像列舉類、狀況類比擬罕見)
5) 將較長的字段或許幾個字段組合做為主鍵?(主鍵最好用mysql自增)
詳細事例以下:

CREATE TABLE `class_meta` (
`class_name` varchar(128) NOT NULL COMMENT '類名',
`class_desc` varchar(2048) default '' COMMENT '類的描寫',
`class_status` char(20) default 'test1' COMMENT 'test1,test2',
PRIMARY KEY (`class_name`),
UNIQUE KEY `cm_cn_uk` (`class_name`),
KEY `cm_cd_ind` (`class_desc`(767)),
KEY `cm_cs_ind` (`class_status`),
KEY `cm_cdcn_ind` (`class_desc`(767),`class_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='meta信息';

經由過程下面的表構造能看到以下處所不適合
1、主鍵與獨一索引顯著反復,索引cm_cd_ind與索引cm_cdcn_ind索引反復(這類情形常常湧現,年夜家留心下)
2、cm_cs_ind假如兩個狀況散布平均也顯著不適合建索引
3、class_desc因為是描寫性質的,也不適合建索引
4、最好以自增做為主鍵,可以削減整表的空間
5、class_status列顯著可以用tinyint來存,可以省下19個字節

2、存儲內容上
1) 能否將圖片、視頻、音樂等年夜數據存儲在表中?(內外最好只保存途徑而不是現實的文件內容)
3、數據保存上
1)能否有已過時而未刪除的數據?(關於有效數據實時清算或許停止汗青歸檔)
4、前期保護上
1)能否對常常刪除的表停止保護(optimize table)

建議:
1、在機能請求不高的case中(並發不太高),可以斟酌應用緊縮表。普通緊縮率在30%-70%之間,收益異常可不雅。
2、關於刪除異常頻仍的表要按期停止優化,使表中碎片削減。進步查詢、寫入的機能。
3、在表構造設計上,必定要發揚“锱铢必較”的精力,能用1個字節表現的果斷不消2個字節。
4、盡可能削減年夜字段的應用。

ps:常常在跟開辟評審表構造的時刻,經常會被笑話說DBA太摳門,一點都不年夜氣。當數據量小的時刻能夠年夜家不認為,但當你的數據級到T或許P的時刻,哪怕多省幾個字節都長短常可不雅的,給年夜家簡略算筆賬,假如我們將一張5億筆記錄的表,字段從100個字節降到60個字節(應當很輕易做到吧),那末不算上索引將勤儉年夜約18G的空間。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved