- 代码逻辑方面
1、尽量不要在数据库做运算;复杂运算移动到程序断CPU;尽可能简单应用MySQL
举反例:md5/Order by Rand()
2、控制表单数据量
- 一年内的表单数据量预估:纯INT不超过1000W; 含CHAR不超过500W
- 合理分表不超载:USERID、DATE、AREA…
- 建议单库不超过300-400个表
3、保持表单身段苗条
- 表字段数少而精:IO高效;全表遍历;表修复快;提高并发;alter table快
- 单表字段数上限控制在20~50个
4、拒绝3B
- 拒绝大SQL
- 拒绝大事务
- 拒绝大批量
5、平衡范式与冗余
在考虑效率、性能时候,可以适当牺牲范式、加入冗余
例如:我们的数据库表有类似于部门、部门名这种适合统一展示;在业务上也频繁只展示这两个字断,完全可在业务表里面直接加入部门名这一冗余字段
字段方面
1、用好数值字段类型
2、将字符转化为数字
3、优先使用枚举/set
4、避免使用NULL字段
5、少用并拆分TEXT/BLOB
6、不在数据库里存图片
索引建立方面
谨慎合理添加索引 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0aade2468433472d8101542ba332ed20.png)
字符字段必须建前缀索引
不在索引列做运算
自增列或者全局ID做INNODB主键
尽量不用外键
SQL方面
SQL语句尽可能简单
保持事务(连接)短小
尽可能避免使用SP/TRIG/FUNC
尽量不使用select *
改写or语句
避免负向查询和%前缀迷糊查询
减少count(*)
LIMIT的高效分页
用UNION ALL 而非 UNION
分解连接保证并发
GROUP BY 去除排序
同数据类型的列值比较
Load data导数据
打散大批量更新
Know Every SQL