国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 13:07:06
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了幾個縮減MySQL以節省磁盤空間的建議,主要從表結構和存儲內容兩個方面來談減容,需要的朋友可以參考下

我們在工作中時常會遇到一些客戶的TPS/QPS都不太高,但磁盤占用非常大,一旦單實例空間太大,像內存、網絡、CPU以及備份都將增加相應的開銷。可能僅僅是由于空間不滿足使得我們不得不進行擴容,下面的方法提供給大家參考。有則改之無則加勉。

1、表結構設計上

1) 字符集是否遵循了最小化原則?(能用latin的就不用gbk。能用gbk的就不用utf8)

2) 索引上是否有濫用?(根本不使用的字段建索引、不適合建索引的字段建索引、重復建索引或者不能很好的利用前綴索引等)

3) 冗余字段是否太多?(各表中不用的或者字段冗余太多)

4) 不正確的字段類型?(能用1個字節非要用幾個字節,像枚舉類、狀態類比較常見)

5) 將較長的字段或者幾個字段組合做為主鍵?(主鍵最好用mysql自增)

具體事例如下:

 

 
  1. CREATE TABLE `class_meta` ( 
  2. `class_name` varchar(128) NOT NULL COMMENT '類名'
  3. `class_desc` varchar(2048) default '' COMMENT '類的描述'
  4. `class_status` char(20) default 'test1' COMMENT 'test1,test2'
  5. PRIMARY KEY (`class_name`), 
  6. UNIQUE KEY `cm_cn_uk` (`class_name`), 
  7. KEY `cm_cd_ind` (`class_desc`(767)), 
  8. KEY `cm_cs_ind` (`class_status`), 
  9. KEY `cm_cdcn_ind` (`class_desc`(767),`class_name`) 
  10. ) 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的空間。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中阳县| 类乌齐县| 东丽区| 普兰县| 大庆市| 晋江市| 芮城县| 章丘市| 瑞安市| 沈丘县| 祥云县| 湘西| 福海县| 乐山市| 思南县| 平武县| 自贡市| 武胜县| 涞水县| 筠连县| 阳城县| 宜宾市| 双鸭山市| 略阳县| 女性| 兴化市| 栖霞市| 枣阳市| 桂阳县| 祁门县| 长丰县| 高碑店市| 珲春市| 闽清县| 东光县| 营山县| 怀集县| 凤翔县| 太谷县| 太谷县| 五峰|