建表时:合理选择字段的类型,单表字段数量
sql查询尽量单表操作,避免复杂操作,复杂的多表通过java代码实现
构建复合索引优化,索引尽量可以覆盖主要业务查询
sql避免索引失效
避免大事务
https://zhuanlan.zhihu.com/p/220028437
SELECT * FROM `user` WHERE DATE(create_time) = '2020-09-03';`
SELECT * FROM `user` WHERE age - 1 = 20;
SELECT * FROM `user` WHERE `name` = '张三' OR height = '175';
SELECT * FROM `user` WHERE `name` LIKE '%冰';
IS NULL不走索引,IS NOT NULL走索引
如果没有必要的要求必须为NULL,那么最好给个默认值空字符串
复合索引 不遵循最左匹配原则会不走索引
EXPLAIN SELECT * FROM `user` WHERE name = '冰峰' AND sex = '男';
spring 事物是通过aop动态代理实现的,所以没有办法通过aop动态代理的情况会导致事物失效
因为 spring 事务,默认情况下只会回滚RuntimeException(运行时异常)和Error(错误),对于普通的 Exception(非运行时异常),它不会回滚。
@Slf4j
@Service
public class UserService {@Transactionalpublic void add(UserModel userModel) throws Exception {try {saveData(userModel);updateData(userModel);} catch (Exception e) {log.error(e.getMessage(), e);throw new Exception(e);}}
}