MySQL数据库设计规范

1,命名规范

1.库名,表名,字段名必须使用小写字母,多个单词中间用下划线隔开;

2.库名,表名,字段名支持最多32个字符,易于辨识和减少传输量不要超过32;

3.库名,表名,字段名禁止使用mysql保留关键字;

4.临时库,临时表名必须以tmp为前缀并以日期为后缀;

5.备份库,备份表名必须以bak为前缀并以日期为后缀;

2,基本规范

1.使用INNODB存储引擎,5.5版本以后默认的引擎,支持事务,行级锁,具有更好的恢复性,高并发下性能更好,对多核,大内存,ssd等硬件支持更好;

2.表字符集使用utf-8,utf-8字符集,如果是汉字,占用3个字节,ASSCII码字符还是1个字节;达到统一,才不会出现转换是乱码的问题;

3.建表是添加备注说明;

4.不在数据库中存储图片,文件等大数据;

5.禁止在线上做数据库压力测试;

6.禁止从测试,开发环境直接连接线上数据库;

3,库表设计规范

1.尽量避免使用分区表,mysql的分区表实际的性能不是很好;

2.拆分大字段和访问频率低的字段,分离冷热数据;

3.采用合理的分库策略,推荐使用hash进行分表,表名后缀使用十进制数,下标从零开始;首次分表尽量多的分,避免二次分表,二次分表成本高,复杂;

4.按日期时间分表要符合yyyy-mm-dd-hh 格式;

5.单表字段控制在20字段以内;

6一条完整的建表语句中必须包含字段,主键,合理索引;

4,设计规范

1.单表中索引数量不超过5个;

2.单个索引中的字段数不超过5个。对字符串使用前缀索引长度不超过10个字符;如果有一个CHAR(200)列,如果在前10个字符内,多数值也是唯一的,那样就不用对整个列进行索引。对前10个列进行索引能够节省大量索引空间,查询也更快;

3表必须有主键,不能使用UUID,MD5,HASH作为主键,尽量不选择字符串列作为主键;主键建议选择自增id;

4创建复合索引时区分度较大的的字段放在,不在低区分度的字段上创建索引,例如:性别;

5避免冗余或者重复索引;合理创建联合索引(避免冗余)

6.索引不是越多越好,按实际需求创建;每个额外的索引都要占用额外的磁盘空间,并降低写操作性能。

7.不在索引列进行数学运算和函数运算。

8.尽量不使用外键。外键用来保护参照完整性,可在业务端实现,对父表和字表操作会相互影响,降低可用性。

9.不使用%前导的查询,这样会导致索引无法使用。

10.不使用反向查询,无法使用索引,导致全表扫描,降低查询效率。

5.字段设计规范

1.尽量不使用text,blob类型。

2.用decimal代替float和double存储,否则会引起精度问题。

3.将字符转化为数字

4.使用tinyint代替enum类型。

5.字段长度按实际需要分配,不要随意分配一个很大容量carchar。

6.如果可以,把所有的字段都定义为not null。

7.使用unsigned存储非负整数。

8.使用timestamp存储时间。

9.使用int unsigned储存ipv4。

10.使用varbinary存储大小写敏感的变长字符串。

11.禁止在数据库中存储明文密码。

6.sql设计规范

1.使用预编译语句prepared statement。只传参数,比传SQL语句更加高效,一次解析,多次使用,降低sql注入概率。

2.尽量避免相同语句由于书写格式的不同,导致多次语法分析。

3.避免隐式转换。会导致索引失效。

4.充分利用前缀索引。必须是最左前缀,不可能同时用到两个范围条件。

5.避免使用存储过程,触发器,events等,让数据库做最擅长的事,降低业务耦合度,为sacle out,shading留余地,避开bug 。

6.避免使用大表join,mysql最擅长是单表的主键,二级索引查询,join消耗较多的内存,产生临时表。

7.避免在数据库中进行数学运算,容易将业务逻辑和db耦合在一起,mysql不擅长数学运算和逻辑判断,无法使用索引。

8.拒绝大sql,查分成小sql,充分利用多核CPU。

9.使用in代替or,in的值不超过1000个。

10.禁止使用order by rand()。因为order by rand()会将数据从磁盘中读取,进行排序,会消耗大量的io和CPU,可以在程序中获取一个rand值,然后通过在从数据库中获取对应的值。

11.使用 union all 而不是 union。

12.程序应有捕获sql异常的处理机制。

13.禁止单条sql语句同时更新过个表。

14.不使用 select * from,消耗CPU和io。

7.行为规范

1.批量导入、导出数据必须提前通知DBA协助观察。

2.批量更新数据,如update ,delete 操作,需要DBA进行审查,并在执行过程中观察服务负载等状况。

3.禁止在主数据库上执行后台管理和统计类功能查询。

4.禁止有super权限的应用程序账号存在。

5.产品出现非数据库导致的故障时应及时通知DBA协助排查。

6.促销活动或新上线功能必须体现通知DBA进行流量评估。

7.数据库数据丢失,及时联系DBA恢复。

8.对单表的多次alter操作必须合并为一次操作,相同类型的写操作合并为一条语句。

9.不在MySQL数据库中放业务逻辑。

10.重大项目的数据库方案选型和设计必须提前通知DBA参与。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(MySQL数据库设计规范)