命名规范
- 所有数据库对象名称必须使用小写字母并用下划线分割。
- 所有数据库对象名称禁止使用数据库的保留关键字。
MySQL关键字查询:http://blog.csdn.net/yuxin6866/article/details/52210207。
若使用了关键字作为字段,查询该字段是必须使用``包裹起来,否则报错。 - 数据库对象名称要做到见名识义,并且长度不要过长。
- 临时表必须以tmp为前缀以日期为后缀。
- 备份表必须以bak为前缀以日期为后缀。
- 所有存储相同数据的列名和列类型必须一致。
基本设计规范
- 所有表必须使用Innodb引擎。
5.6版本以后的默认引擎为Innodb,其支持事务,行级锁,更好的恢复性,高并发下性能更好。 - 数据库和表的字符集统一用UTF8。
- 所有的表和字段都必须添加注释。
- 尽量控制单表数据量的大小,简易控制在500万行内。
可以用历史数据归档,分库分表等手段来控制数据量的大小。 - 尽量做到冷热数据分离,减小表的宽度(减小表的列数)。
减少磁盘IO,暴走热数据的内存缓存命中率。
避免读入无用的冷数据。
经常使用的列放到一个表中。 - 禁止在表中建立预留字段。
预留字段的命名很难做到见名识义。
预留字段无法取得存储的数据类型。
对预留字段的修改会对表进行锁定,影响并发性。 - 禁止在数据库中存储图片,文件等二进制数据。
影响数据库性能。 - 禁止在线上做数据库压力测试。
- 禁止从开发环境,测试环境中连接生成环境的数据库。
索引设计规范
- 限制每张表上的索引的数量,建议单张表索引不超过5个。
索引并不是越多越好。 - 禁止给表中的每一列建立一个索引。
- 每个Innodb表必须有一个主键。
不使用更新频繁的列作为主键,不使用多列主键。
不使用UUID,MD5,HASH,字符串作为主键。
主键建议使用MySQL的自增ID作为主键。 - 常见索引列建议:
select、update、delete语句的where从句中的列。
包含order by、group by、distinct中的字段。
多表join的关联列。 - 索引列的顺序:
区分度最高的列放在联合索引的最左侧。
尽量吧字段长度小的列放在联合索引的最左侧。
使用最频繁的列放在联合索引的最左侧。 - 避免建立冗余和重复的索引。
- 对于频繁的查询优先考虑使用覆盖索引。
覆盖索引:包含所有查询字段的索引。
好处:避免Innodb表进行索引的二次查找,可以把随机IO变为顺序IO较快查询效率。 - 尽量避免使用外键。
不建议使用外键约束,但一定要在表与表之间的关联键上建立索引。
网友评论