[关闭]
@1234567890 2020-04-21T03:12:00.000000Z 字数 8046 阅读 3247

mysql规范

mysql


命名规范

1. 库名、表名、字段名必须使用小写字母,并采用下划线分割

2. 前缀命令规范

3. 库名、表名、字段名禁止超过32个字符,需见名知意

4. 按日期时间分表须符合_YYYYMMDD格式

库表基础规范

1. 使用Innodb存储引擎

2. 表编码方式统一使用UTF8或UTF8MB4的

3. 所有表都要添加注释

4. 控制单表字段数量

5. 所有表都必须要显式指定主键

6. 不使用外键

7. 字段名称统一

8. 简单单表数据量控制在5000w以内

9. 尽量保证单表存储空间小于10GB

字段规范

1. char、varchar、text等字符串类型定义

2. int、tinyint、decimal等数字类型定义

3. timestamp与datetime选择

4. 建议字段都定义为NOT NULL加上default值

5. 类型选择原则

Int->char->varchar->text,从左到右性能越差

四. 索引规范

1. 索引个数限制

2. 避免冗余索引

3. 索引创建原则

4. 最左前缀原则

5. 前缀索引

6. 合理使用覆盖索引减少IO

7. 不要在频繁更新的列上创建索引

五. SQL设计

1. 杜绝直接 SELECT * 读取全部字段

2. 能确定返回结果只有一条时,使用 limit 1

在保证数据不会有误的前提下,能确定结果集数量时,多使用limit,尽快的返回结果。

3. 建议不要使用隐式类型转换

4. 禁止在where条件列上使用函数

5. 使用like模糊匹配,%不要放首位

6. 使用join时,where条件尽量使用充分利用同一表上的索引

如 select t1.a,t2.b * from t1,t2 and t1.a=t2.a and t1.b=123 and t2.c= 4 ,如果t1.c与t2.c字段相同,那么t1上的索引(b,c)就只用到b了。此时如果把where条件中的t2.c=4改成t1.c=4,那么可以用到完整的索引
* 这种情况可能会在字段冗余设计(反范式)时出现
*. 正确选取inner join和left join

7. 少用或不用子查询,改用join

8. 考虑使用union all,少使用union,注意考虑去重

9. IN的内容尽量不超过200个

10. 拒绝大事务

11. 避免使用is null, is not null这样的比较

12. 杜绝危险SQL

13. SQL中不允许出现DDL语句。一般也不给予create/alter这类权限

七.使用建议

1. order by .. limit

2. c1 < a order by c2

3. 分页优化

4. count计数

5. delete,update语句改成select再explain

6. 涉及到复杂sql时,务必先参考已有索引设计,先explain

7. 减少与数据库交互的次数,尽量采用批量SQL语句

8. 隐式类型使用注意事项

9. 任何新的select,update,delete上线,建议都要先explain,看索引使用情况

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注