引言
每一条都是来自一线的实战经验、每一条都是背后血淋淋的教训,不要华丽,只要实用。
正文
尽量不在数据库做运算(比如md5/Order by Rand)
拒绝3B(Big SQL,Big Transaction,Big Batch)
控制单表的数据量
将字符转化为数字(比如用INT存储IP地址,而不是CHAR(15))
避免实用NULL字段(NULL很难进行查询优化,而且索引需要浪费额外空间,含NULL的复合索引无效)
少用并且拆分TEXT/BLOB
不在数据库里存放图片
谨慎合理添加索引(改善查询,减慢更新,索引并不是越多越好,能不加的尽量别加)
字符字段尽量建前缀索引
不要再索引列做运算(无法使用索引,导致全表扫描)
自增列或者全局ID做INNOBD主键
尽量不要使用外键(额外开销,可‘到达’其他表,意味着锁,高并发时容易死锁。可以有程序保证约束)
SQL语句尽可能的简单
保持事务(连接)短小
尽量不用SELECT *(会先去数据库请求所有列,然后丢掉不需要列。只取需要的列)
OR尽可能的改为IN、UNION()
避免负向查询和%前缀模糊查询(负向查询==NOT、!=、<>、NOT IN、NOT LIKE,前缀模糊会导致不能使用索引,全表扫描)
高效分页(情况分为几种,这里不过多进行阐述)
使用UNION ALL 而UNION
GROUP BY去除排序
进行使用同数据类型的列值比较
使用Laod data导数据
打散大批量更新