-
所有数据库对象名称必须使用小写字母并用下划线分割
MySQL严格区分大小写 -
所有数据库对象名称禁止使用MySQL保留关键字
例如from date常见关键字 -
命名要做到见名识义,最好不要超过32个字符
-
临时表以tmp为前缀日期为后缀
备份表以bak为前缀日期为后缀 -
所有存储相同数据的列明和列类型必须一致
否则做连接的时候会进行转换,会导致索引失效 -
尽可能的使用Innodb存储引擎,除非有特殊需求
-
字符集统一使用utf8
-
所有表和字段都要添加注释,备忘,维护好数据库字典
-
单表数据量尽可能控制在500万以内,并非最大限制
可以用历史数据归档和分表来控制 -
谨慎使用分区表,尽可能少的跨分区查询
-
控制了列数,更有效的利用缓存
-
把经常使用的列放在一个表中
-
禁止建立预留字段
-
禁止存储图片或文件等二进制数据,建议存储二进制所在的地址信息
-
禁止在线上做压力测试
-
冷热数据分离
索引设计规范
- 单张表索引数量不超过5个
索引并不是越多越好,索引可以提高效率同样可以降低效率 - 必须要有主键
不使用频繁更新的列和多列主键
选用值顺序增长的列为主键 建议选用自增id - 索引建议
从where从句中的列或包含在ORDER BY、GROUP BY、DISTINCT中的字段
多表JOIN关联列 - 索引顺序是从左到右的
区分度最高的列放在联合索引的最左侧
尽量把长度小的列放在左侧
把使用频繁的列放在左侧 - 避免冗余和重复的索引
- 对于频繁的查询有限使用覆盖索引
- 尽量避免使用外键
数据库字段设计规范
- 优先选择符合存储需要最小的数据类型
将字符串转化为数字类型存储
对于非负数选择无符号整形进行存储 - VARCHAR(N)N代表的是字符数不是字节数
- 尽量不适用TEXT,BLOB,ENUM数据类型
- 不要用字符串存储日期型数据
数据库SQL开发规范
- 建议使用预编译语句
- 尽量避免类型隐式转换
- 避免使用双%号的查询条件
- 一个SQL只能利用到复合索引中的一列进行范围查询
- 禁止使用SELECT *
- 避免使用子查询,可以优化为join