MySQL 开发规范

MySQL开发规范由基础规范、命名规范、字段规范、索引规范、语句规范组成。

1、基础规范

(1)所有表统一使用InnoDB存储引擎。

(2)表字符集选择UTF8mb4。

(3)所有表和列都需要添加注释。

(4)禁止在数据库中存储明文密码。

(5)禁止客户端直接操作数据库。

(6)禁止在线上数据库做压力测试。

(7)表结构更新,研发必须提供更新文档(包含更新语句和回滚语句)。

(8)表结构更新,DBA审核未通过的,不允许上线。

2、命名规范

(1)库名、表名、字段名必须使用小写字母加下划线的命名方式。

(2)库名、表名、字段名字符数不易太长但必须见名知意。

(3)库名、表名、字段名禁止使用MySQL保留字。

(4)临时库、表名必须以tmp为前缀,并以日期为后缀。

(5)备份库、表名必须以bak为前缀,并以日期为后缀。

3、字段规范

(1)每张表必须有整型主键。

(2)禁止DEFAULT NULL,建议NOT NULL,设置默认值。

(3)存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE,或者使用BIGINT(需要做转换)。

(4)建议使用UNSIGNED存储非负数值。

(5)不建议使用ENUM类型,使用TINYINT类型来代替。

(6)存储状态,性别等选择性低的字段,用TINYINT类型。

(7)尽可能不使用TEXT、BLOB类型。如果必须使用,要拆分到单独的表中存储。

(8)需要根据实际的宽度来选择VARCHAR(N)类型的宽度。

(9)存储年使用YEAR类型,存储日期使用DATE类型。

(10)存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。TIMESTAMP类型保存的值不能比1970早或比2037晚。

4、索引规范

(1)单张表的索引数量控制在5个以内。

(2)组合索引中的字段数建议不超过5个。

(3)不使用更新频繁的列做为索引。

(4)对长字符串考虑使用前缀索引,前缀索引长度不超过8个字符。

(5)使用EXPLAIN判断SQL语句是否合理使用索引,尽量避免extra列出现:Using File Sort,Using Temporary。

(6)UPDATE、DELETE语句需要根据WHERE条件添加索引。

(7)合理创建组合索引,(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c),但(a,c)只能用到部分索引。

(8)不在选择性低的列上建立索引,例如"性别","状态", "类型"。

(9)高并发场景不建议使用唯一索引。

5、语句规范

(1)SQL语句中IN包含的值不应过多(不超过1000个)

(2)UPDATE、DELETE语句不使用LIMIT。

(3)WHERE条件中必须使用合适的类型,避免MySQL进行隐式类型转化而使用不到索引。

(4)SELECT、INSERT语句必须显式的指明字段名称。

(5)WHERE条件中的非等值条件(IN、BETWEEN、<、<=、>、>=)会导致后面的条件使用不了索引,尽量放在最后。

(6)INSERT语句使用多值提交,values的个数不应过多。

(7)避免使用存储过程、触发器、函数、数学运算、外键等,容易将业务逻辑和DB耦合在一起。

(8)尽量避免使用JOIN。

(9)使用合理的SQL语句减少与数据库的交互次数。

(10)不使用ORDER BY RAND(),使用其他方法替换。

(11)建议使用合理的分页方式以提高分页的效率。

(12)不使用前导查询,如like "%ab",like "%ab%"。

(13)用or分割开的条件,or两边的字段都要创建索引。

你可能感兴趣的:(MySQL 开发规范)