默认统一使用InnoDB引擎mysql
后续新建DB默认使用utf8mb4字符集,校对规则使用utf8mb4_general_bin。sql
历史DB多使用utf8字符集,此部分不作改动。函数
统一使用read-committed隔离级别(RDS默认)。大数据
不采用mysql默认的read-repeated隔离级别。设计
应用访问帐号由开发和DBA共同协商决定,默认一个DB提供两个帐户,命名规则为xxxx_rw和xxxx_ro。索引
xxxx为区分区分业务模块的缩写,长度控制在10个字符之内。事务
xxxx_rw为业务读写帐户,默认权限为insert,update,select。不支持delete权限,delete操做统一使用逻辑删除或者走数据修改流程由DBA完成。ci
xxxx_ro为业务只读帐户,默认权限为select。开发
应用访问帐号为配置在应用里的专属帐号,任何我的不得使用。字符串
一、 全部表名不区分大小写,统一使用小写命名。
2 、命名规则必须见名知意,命名与业务、产品线等相关联。
三、表名长度控制在40个字符之内。
四、 禁止使用mysql关键字,包括且不限于的关键字有:key、values、repeat、use、show、schema、desc。
5 、临时表必须以tmp为前缀,例如 tmp_test01。
一、禁止使用外键,触发器。
二、表必需要有注释,全部字段必需要有注释。
三、尽可能将字段设计成not null的,并维护好not null约束。
四、设计表时要预估一年的数据增量,若一年数据量上千万(单月数据上几百万),须要考虑数据是否能够分区、是否能够归档处理以及归档策略。
一、 全部表必须有三个标准字段
id char(24) 主键。
create_time datetime 建立时间,只能在insert时插入now(),不容许自定义数据插入。
update_time datetime 更新时间,只能在insert或update是更新为now(),不容许自定义数据插入,代码作任何update操做时必须同步更新update_time字段,维护单列索引。
is_deleted tinyint(1) 是否删除
2 、存储小数所有使用decimal,不容许出现float、double。
三、存储时间,所有使用datetime,再也不使用timestamp,默认存储到秒。若须要存储到毫秒级别,须要使用datetime(6),毫秒最多保留6位精度,能够根据须要自定义精度,如datetime(3)。
四、对于vachar(10),长度定义指的是字符长度,一个汉字或者一个字母都是一个字符,尽可能准确估算须要的长度
五、不容许使用text、blob等字段。
六、不容许使用bit字段,使用tinyint代替。
七、不容许使用enum、set字段。
一、索引命名建议采用包含索引类型、表名、字段名三要素。表名和字段名能够酌情缩写,整个名称长度建议不超过32位。对于普通索引,统一使用idx_前缀,惟一索引使用uk_前缀。
二、insert时同步维护create_time和update_time,update时维护update_time。update_time字段必须创建一个索引。
三、尽可能创建组合索引,理解mysql组合索引的最左使用原则,好比(a,b,c) 至关于 (a) 、(a,b) 、(a,b,c)。
四、创建组合索引的时候,区分度高的放在前面,查询使用场景多的放在前面。
五、惟一索引的全部字段必须设置为not null。
六、单表索引尽可能不超过5个,单个索引中的字段数不超过5个。
七、若建索引不知道如何合适,请与DBA沟通。
一、禁止使用select * ,全部查询必须明确字段名称。
二、禁止使用子查询,使用join方式代替。
三、禁止使用左%匹配查询,例如: like "%abc",没法利用到索引。
四、禁止隐式转换,数值类型禁止加引号;字符串类型必须加引号。
五、禁止大事务,禁止单条sql进行大量数据更新,会形成从库延迟。单次更新超过10W的更新,须要采用过程分批更新,批次更新单批次不超过500条,批次间sleep很多于0.5s。
六、insert时必须将create_time和update_time填充为now()
七、update时必须更新update_time字段为now()。
八、大数据量查询必需要使用limit进行分页处理,单次查询控制在1000条之内。
九、尽可能使用union all 代替 union
十、表关联最多不能超过3个,且关联条件必须有匹配的索引。
十一、分区表查询必需要带分区键。
十二、禁止where中对字段进行函数或表达式处理。如where year(update_time) = '2018'。
1三、禁止无where条件的查询,如where 1=1
1四、禁止使用标量子查询。
1五、禁止查询中使用!=、not in。