一.基础规范
●表存储引擎必须使用Innodb。 这是特别强调必须
●表字符集默认使用utf-8
画外音:通用,无乱码风险,汉字一般3个字节,英文1字节
●禁止使用存储过程、视图、触发器、Event
画外音:对数据库性能影响很大,能让站点层和服务层干的事情,不要交到数据库层
●禁止在数据库中存储大文件,比如说图片,可以将大文件存在对象存储系统中
●禁止在线上环境做压力测试
●测试、开发、线上数据库环境必须隔离开来
二、命令规范。
●库名,表名,列名必须使用小写
画外音: ABc、abC都是在给自己埋坑
●库名、表名、列名必须见名知其义
画外音: nanjing,pukou 谁知道你什么意思啊
●库备份必须以.bak为前缀,以日期为后缀
●从库必须-s为后缀
●备库必须以 -ss为后缀
三、表设计规范
●单实例表个数控制在2000个以内
●单表分表个数必须控制在1024个以内
●表必须有主键,推荐使用UNSIGNED整数位主键
画外音:如果是row模式的主从复制模式,从库会挂。sql语句模式的还好
●禁止使用外键,如果要保证完整性,应该用程序来实现
画外音:使用外键,会影响update/delete的性能,有可能会造成死锁
四、列设计规范
●业务区分 tinyint/int/bigint 占用的大小为1/4/8字节
●根据业务区分 datetime/timestamp
画外音:前者是5字节,后者是4个字节
●必须把字段定义为 not null并设默认值
画外音: 1.NULL muysql比较难优化
2.NULL需要更大的存储空间
3.NULL只能使用IS NULL或者IS NOT NULL
●使用int unsigned 存储ipv4 ,不要直接用 char来定义
●使用varchar(20)存储手机号,不要使用整数
画外音:
(1)手机号不会用来做数学运算
(2)varchar可以模糊查询,例如 like'139%'
五、索引规范
●唯一索引使用 iniq_[字段名]命名
●非唯一索引使用idx_[字段名]来命名
●单张表索引数量建议控制在5个以内
画外音:
(1)互联网场景下,太多索引影响写性能
(2)索引太多,会导致mysql找不到最优索引
(3)异常复杂的查询需求,可以选择ES带替代
●不建议在频繁更新的字段上建立索引
●非必要不要进行join查询,如果实在要进行join查询,被join的字段必须类型相同,并建立索引
画外音:join的字段类型不同,可能会导致全表扫描
六、SQL规范
●禁止使用select * 只获取必要字段
●insert必须指定字段 ,禁止使用insert into T values()
画外音:表结构变更后,保证程序不会受影响
●禁止在where条件使用函数或者表达式
●禁止大表join和子查询
●同一个字段上的OR必须改写用IN,IN的值必须少于50个
●应用程序必须捕获SQL异常
画外音:方便定位线上问题
无状态:进程之间对等
.
.

