原创 MySQL日常开发使用总结

良好的使用规范,
可以帮助我们更好更快的使用数据库,
避免一些不好的使用习惯的养成。

表设计

1.表字符集明确使用utf8mb4
2.存储引擎使用INNODB
3.不在数据库中存储图片、文件,避免使用大文本类型
4.不使用外键,由程序保证数据一致性
5.禁止使用存储过程、视图
6.每张表数据量控制在2000W以下 ,如预计会超出,需提前做好拆分或者归档迁移计划
7.每张表必须要有无歧义的全面的注释

字段设计

1.每个字段均定义为NOT NULL,且必须要有默认值(除自增id外),不允许默认null(不能被索引)
2.每个字段必须要有无歧义的全面的注释(除自增id外)
3.字段设计为合适的大小,使用UNSIGNED标记存储非负整数
4.使用DECIMAL存储精确浮点数(Float、Double这些浮点数均是不精确的)
5.使用TINYINT来代替ENUM类型
6.TEXT、BLOB等类型的大存储字段,需要进行拆分,或者独立建表
7.尽可能将可枚举的字符转化为数字存储(单独拆分建表)

建议:使用UNSIGNED INT存储ipv4 地址,而不是CHAR(15)

建议:使用DATETIME存储操作时间

命名

1.库名、表名、字段名、索引名使用小写字母,以下划线_分割
2.库名、表名、字段名、索引名不使用保留字 (关键字)
3.库名、表名、字段名不超过20个字符,需见名知意,避免使用缩写

主从

尽量使用应用服务器时间而不是数据库时间,防止主从同步延迟导致的时间不一致。例如 ON UPDATE CURRENT_TIMESTAMP

索引规范

1.单张表索引数量不超过5,单个索引字段数不超过5(如果超过,说明这个表为过度使用的表需要拆分了,或者索引设计不合理)

2.不能有冗余索引(例如A+B索引和A索引)
3.重要的SQL必须被索引。以下为可使用索引的场景:

- SELECT、UPDATE、DELETE语句的WHERE条件列 - ORDER BY、GROUP BY、DISTINCT的字段 - 多表JOIN的字段

4.用不了索引的情况(查询条件里有包含索引的字段的情况下):

- 相关索引列进行了数学运算和函数运算 逻辑判断使用的是like ‘通配符+XXX’ 与某个无索引的字段使用了逻辑或(or)关联查询 查询索引结果集过大,mysql放弃使用索引

SQL语句设计规范

1.避免使用大表join,会降低索引利用率,并可能会创建较大的内存临时表的创建

2.将复杂的sql在代码层面拆分设计,避免复杂难以理解和维护的SQL
3.避免在超过5次的循环体内执行sql,改为在循环外批量执行,减少与数据库的交互次数
4.不使用select *


  下一篇:  这是最后一篇了,亲
本文为 Laysonx 原创 文章,转载无需和我联系,但请注明来自 李鑫的杂货铺 或 李鑫博客