mysql实践行为准则
- 通过普通索引更新数据,在mysql默认的rr隔离级别下会产生间隙锁,会导致在锁范围内新增数据记录时被阻塞;
- 使用二级索引更新记录时,在二级索引上产生的间隙锁容易与插入意向锁形成竞态,相互等待,导致死锁;
- 必须使用主键更新数据;
- 所有的update和delete操作,必须使用主键索引来更新数据;
- 不使用replace into操作数据,相同场景使用insert into … on duplicate key update …替代;
- 必须使用innodb,utf-8,指定主键(一般为自增ID);
- 避免使用全文索引;
- 单表数据超过500万条再考虑分表分库;
- 字段属性定义越小越好,能char就不varchar,所有字段都必须设备not null并给默认值;
- 小数类型必须定义为decimal,float/double存在精度丢失问题;
- varchar长度不超过2000;
- 禁止超过三个表的join;
- like左模糊或全模糊匹配会导致索引失效;