如何维护自己公司的网站南阳商都网站做网站
mysql优化
优化准则:
建表时:合理选择字段的类型,单表字段数量
sql查询尽量单表操作,避免复杂操作,复杂的多表通过java代码实现
 构建复合索引优化,索引尽量可以覆盖主要业务查询
 sql避免索引失效
 避免大事务
索引失效场景:
https://zhuanlan.zhihu.com/p/220028437
- 使用!= 或者 <> 导致索引失效
 - 类型不一致导致的索引失效
 - where条件中有计算
 
SELECT * FROM `user` WHERE DATE(create_time) = '2020-09-03';`
SELECT * FROM `user` WHERE age - 1 = 20;
 
- OR引起的索引失效
OR导致索引是在特定情况下的,并不是所有的OR都是使索引失效,如果OR连接的是同一个字段,那么索引不会失效,反之索引失效。 
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 管理
 - 类内部的方法相互调用
 - 方法是私有方法
 - 被 final或者static修饰的方法
 - 多线程调用,子线程中的事物会失效
 - 自己tray catch的异常
 - 数据库引擎是myisam
 - 手动抛了别的异常
上面的这种情况,开发人员自己捕获了异常,又手动抛出了异常:Exception,事务同样不会回滚。 
因为 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);}}
}
