1.库名,表名,字段名必须使用小写字母,多个单词中间用下划线隔开;
2.库名,表名,字段名支持最多32个字符,易于辨识和减少传输量不要超过32;
3.库名,表名,字段名禁止使用mysql保留关键字;
4.临时库,临时表名必须以tmp为前缀并以日期为后缀;
5.备份库,备份表名必须以bak为前缀并以日期为后缀;
1.使用INNODB存储引擎,5.5版本以后默认的引擎,支持事务,行级锁,具有更好的恢复性,高并发下性能更好,对多核,大内存,ssd等硬件支持更好;
2.表字符集使用utf-8,utf-8字符集,如果是汉字,占用3个字节,ASSCII码字符还是1个字节;达到统一,才不会出现转换是乱码的问题;
3.建表是添加备注说明;
4.不在数据库中存储图片,文件等大数据;
5.禁止在线上做数据库压力测试;
6.禁止从测试,开发环境直接连接线上数据库;
1.尽量避免使用分区表,mysql的分区表实际的性能不是很好;
2.拆分大字段和访问频率低的字段,分离冷热数据;
3.采用合理的分库策略,推荐使用hash进行分表,表名后缀使用十进制数,下标从零开始;首次分表尽量多的分,避免二次分表,二次分表成本高,复杂;
4.按日期时间分表要符合yyyy-mm-dd-hh 格式;
5.单表字段控制在20字段以内;
6一条完整的建表语句中必须包含字段,主键,合理索引;
1.单表中索引数量不超过5个;
2.单个索引中的字段数不超过5个。对字符串使用前缀索引长度不超过10个字符;如果有一个CHAR(200)列,如果在前10个字符内,多数值也是唯一的,那样就不用对整个列进行索引。对前10个列进行索引能够节省大量索引空间,查询也更快;
3表必须有主键,不能使用UUID,MD5,HASH作为主键,尽量不选择字符串列作为主键;主键建议选择自增id;
4创建复合索引时区分度较大的的字段放在,不在低区分度的字段上创建索引,例如:性别;
5避免冗余或者重复索引;合理创建联合索引(避免冗余)
6.索引不是越多越好,按实际需求创建;每个额外的索引都要占用额外的磁盘空间,并降低写操作性能。
7.不在索引列进行数学运算和函数运算。
8.尽量不使用外键。外键用来保护参照完整性,可在业务端实现,对父表和字表操作会相互影响,降低可用性。
9.不使用%前导的查询,这样会导致索引无法使用。
10.不使用反向查询,无法使用索引,导致全表扫描,降低查询效率。
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.禁止在数据库中存储明文密码。
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。
1.批量导入、导出数据必须提前通知DBA协助观察。
2.批量更新数据,如update ,delete 操作,需要DBA进行审查,并在执行过程中观察服务负载等状况。
3.禁止在主数据库上执行后台管理和统计类功能查询。
4.禁止有super权限的应用程序账号存在。
5.产品出现非数据库导致的故障时应及时通知DBA协助排查。
6.促销活动或新上线功能必须体现通知DBA进行流量评估。
7.数据库数据丢失,及时联系DBA恢复。
8.对单表的多次alter操作必须合并为一次操作,相同类型的写操作合并为一条语句。
9.不在MySQL数据库中放业务逻辑。
10.重大项目的数据库方案选型和设计必须提前通知DBA参与。