转载自 MySQL数据库开发的 36 条军规
核心军规
-
尽量不在数据库做运算
-
控制单表数据量 纯INT不超过10M条,含Char不超过5M条
-
保持表身段苗条
-
平衡范式和冗余
-
拒绝大SQL,复杂事务,大批量任务
字段类军规
-
用好数值字段,尽量简化字段位数
-
把字符转化为数字
-
优先使用Enum或Set
-
避免使用Null字段
-
少用并拆封Text/Blob
-
不在数据库中存图片
索引类军规
-
谨慎合理添加索引
-
字符字段必须建立前缀索引?
-
不在索引列做运算
-
自增列或全局ID做InnoDB主键
-
尽量不用外键
SQL类军规
-
SQL尽可能简单
-
保持事务连接短小
-
尽可能避免使用SP/Trigger/Function
-
尽量不用Select *
-
改写Or为IN()
-
改写Or为Union
-
避免负向查询和%前缀模糊查询
-
Count不要使用在可Null的字段上面
-
减少Count(*)
-
Limit高效分页,SELECT * FROM message WHERE id > 9527 (or sub select) limit 10
-
使用Union ALL 而不用Union
-
分解链接,保证高并发
-
Group By 去除排序
-
同数据类型的列值比较
-
Load Data导入数据,比Insert快20倍
-
打散大批量更新,尽量凌晨操作
约定类军规
-
隔离线上线下
-
禁止未经DBA认证的子查询
-
永远不在程序段显式加锁
-
表字符集统一使用UTF8MB4