数据库命名规范
1、所有数据库对象名称必须使用小写字母并用下划线分割
2、所有数据库对象名称禁止只用MySql的保留关键字
3、数据库对象的命名要能做到见名识义,并且做好不要超过32个字符
4、临时库表须以tmp为前缀并以日期为后缀
5、备份库,备份表须以bak为前缀并以日期为后缀
6、所有存储相同数据的列名和列类必须一致
数据库设计规范
1、使用InnoDB存储引擎
2、数据库和表统一使用utf-8编码
3、所有的表和字段都需要添加注释
4、尽量控制单表数据库的大小,建议控制在500万行以内
5、尽量做到冷热数据分离,减少表的宽度(把经常一起使用的字段放到一个表中)
6、禁止在表中建立预留字段
7、禁止在数据库中存储图片,文件等二进制数据
8、禁止在线上做数据库压力测试
9、禁止从开发环境,测试环境直接连接生产环境数据库
索引设置规范
1、限制每张表上的索引数量,建议单张表索引不超过5个
2、每个Innodb表必须有一个主键,建议不适用更新频繁的列作为主键,不适用多列主键
数据库设计规范
1、优先选择符合存储需要的最小的数据类型
2、尽可能把所有列定义为NOT NULL
3、要适用TIMESTAMP或DATETIME类型存储时间
4、同财务相关的金额类数据,必须使用decimal类型
5、避免适用text、blob、emuy类型
数据库SQL开发规范
1、建议使用预编译语句进行数据库操作
2、尽量避免数据类型的隐式转换
3、充分利用表上已经存在的所有
说明:1、避免适用双%号的查询条件。如果 a like '%123%'
2、一个SQL只能利用到复合索引中的一列进行范围查找
3、适用left join或not exists来优化not in
4、程序连接不同的数据库适用不同的账号,禁止跨库查询
5、禁止使用select * 必须适用 select <字段列表> 查询
6、禁止使用不含字段列表的insert语句
7、避免适用子查询,可以把子查询优化为join操作
8、避免适用join关联太多的表(mysql最多允许关联61个表,建议不要超过5个)
9、减少同数据库的交互次数
10、适用in代替or,in中的值不超过500个
11、禁止使用order by rand()进行随机排序
12、where从句中禁止对列进行函数转换或计算
13、在明显不会有重复值时,适用union all而不是union
14、拆分复杂的大sql为多个小sql
数据库操作规范
1、超过100万行的批量写操作,要分批多次进行操作
2、对于大表适用pt-online-chema-change修改表结构
3、禁止为程序适用的账号赋予super权限
4、对于程序连接的数据库账号,遵循权限最小原则,不准有drop权限
适用分区表的注意事项
1、结合业务场景选择分区键,避免跨分区查询
2、对分区表进行查询最好在where从句中包含分区键
3、具有主键或唯一索引的表,主键或唯一索引必须是分区键的一部分
1、所有数据库对象名称必须使用小写字母并用下划线分割
2、所有数据库对象名称禁止只用MySql的保留关键字
3、数据库对象的命名要能做到见名识义,并且做好不要超过32个字符
4、临时库表须以tmp为前缀并以日期为后缀
5、备份库,备份表须以bak为前缀并以日期为后缀
6、所有存储相同数据的列名和列类必须一致
数据库设计规范
1、使用InnoDB存储引擎
2、数据库和表统一使用utf-8编码
3、所有的表和字段都需要添加注释
4、尽量控制单表数据库的大小,建议控制在500万行以内
5、尽量做到冷热数据分离,减少表的宽度(把经常一起使用的字段放到一个表中)
6、禁止在表中建立预留字段
7、禁止在数据库中存储图片,文件等二进制数据
8、禁止在线上做数据库压力测试
9、禁止从开发环境,测试环境直接连接生产环境数据库
索引设置规范
1、限制每张表上的索引数量,建议单张表索引不超过5个
2、每个Innodb表必须有一个主键,建议不适用更新频繁的列作为主键,不适用多列主键
数据库设计规范
1、优先选择符合存储需要的最小的数据类型
2、尽可能把所有列定义为NOT NULL
3、要适用TIMESTAMP或DATETIME类型存储时间
4、同财务相关的金额类数据,必须使用decimal类型
5、避免适用text、blob、emuy类型
数据库SQL开发规范
1、建议使用预编译语句进行数据库操作
2、尽量避免数据类型的隐式转换
3、充分利用表上已经存在的所有
说明:1、避免适用双%号的查询条件。如果 a like '%123%'
2、一个SQL只能利用到复合索引中的一列进行范围查找
3、适用left join或not exists来优化not in
4、程序连接不同的数据库适用不同的账号,禁止跨库查询
5、禁止使用select * 必须适用 select <字段列表> 查询
6、禁止使用不含字段列表的insert语句
7、避免适用子查询,可以把子查询优化为join操作
8、避免适用join关联太多的表(mysql最多允许关联61个表,建议不要超过5个)
9、减少同数据库的交互次数
10、适用in代替or,in中的值不超过500个
11、禁止使用order by rand()进行随机排序
12、where从句中禁止对列进行函数转换或计算
13、在明显不会有重复值时,适用union all而不是union
14、拆分复杂的大sql为多个小sql
数据库操作规范
1、超过100万行的批量写操作,要分批多次进行操作
2、对于大表适用pt-online-chema-change修改表结构
3、禁止为程序适用的账号赋予super权限
4、对于程序连接的数据库账号,遵循权限最小原则,不准有drop权限
适用分区表的注意事项
1、结合业务场景选择分区键,避免跨分区查询
2、对分区表进行查询最好在where从句中包含分区键
3、具有主键或唯一索引的表,主键或唯一索引必须是分区键的一部分