文章目录
- 一、核心军规
- 二、字段类军规
- 三、索引类军规
- 四、SQL类军规
- 4.1 SQL尽可能简单
- 4.2 保持事务连接短小
- 4.3 尽可能避免使用SP/Trigger/Function
- 4.4 尽量不用Select *
- 4.5 改写Or为IN()
- 4.6 改写Or为Union
- 4.7 避免负向查询和%前缀模糊查询
- 4.8 Count不要使用在可Null的字段上面
- 4.9 减少Count(*)
- 4.10 Limit高效分页
- 4.11 使用Union ALL 而不用Union
- 4.12 分解链接,保证高并发
- 4.13 Group By 去除排序
- 4.14 同数据类型的列值比较
- 4.15 Load Data导入数据,比Insert快20倍
- 4.16 打散大批量更新,尽量凌晨操作
- 五、约定类军规
一、核心军规
1.1 尽量不在数据库做运算
1.2 控制单表数据量
纯INT不超过10M条,含Char不超过5M条
1.3 保持表身段苗条
1.4 平衡范式和冗余
1.5 拒绝大SQL,复杂事务,大批量任务
二、字段类军规
2.1 用好数值字段,尽量简化字段位数
2.2 把字符转化为数字
2.3 优先使用Enum或Set
2.4 避免使用Null字段
2.5 少用并拆封Text/Blob
2.6 不在数据库中存图片
三、索引类军规
3.1 谨慎合理添加索引
3.2 字符字段必须建立前缀索引?
3.3 不在索引列做运算
3.4 自增列或全局ID做InnoDB主键
3.5 尽量不用外键
四、SQL类军规
4.1 SQL尽可能简单
4.2 保持事务连接短小
4.3 尽可能避免使用SP/Trigger/Function
4.4 尽量不用Select *
4.5 改写Or为IN()
4.6 改写Or为Union
4.7 避免负向查询和%前缀模糊查询
4.8 Count不要使用在可Null的字段上面
4.9 减少Count(*)
4.10 Limit高效分页
SELECT * FROM message WHERE id > 9527 (or sub select) limit 10