几个缩减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信息'; 通过上面的表结构能看到如下地方不合适 2、存储内容上 建议: ps:经常在跟开发评审表结构的时候,时常会被笑话说DBA太抠门,一点都不大气。当数据量小的时候可能大家不觉得,但当你的数据级到T或者P的时候,哪怕多省几个字节都是非常可观的,给大家简单算笔账,如果我们将一张5亿条记录的表,字段从100个字节降到60个字节(应该很容易做到吧),那么不算上索引将节约大约18G的空间。 |