面试时,说说项目中做了哪些优化过程。
- 项目中进行过sql调优吗?数据量有多少?
答:有,比如我们有一个业务列表查询,是查询采购计划单列表,其中一个查询条件商品名称是在采购计划单详情中。数据量左表8000多条数据,右表为12万左右。接口超时时间为1s。
第一步查看服务日志,正常调用了。
第二步骤查看网关服务超时了。
第三步骤分析代码,查看sql.在sql中执行,发现比较慢。
EXPLAIN
select * from sys_user t1 LEFT JOIN sys_user_role t2 on t1.user_id = t2.user_id;
EXPLAIN
select * from sys_user t1 inner JOIN sys_user_role t2 on t1.user_id = t2.user_id;
主表本来就有主键索引,inner join会走主表索引自动优化为数据量少的当主表。
而left join则不会走索引。
改造后;
当建立右表user_id_indexx后。发现left join走索引了。
优化1:改造代码,没有查询条件时,单表查询。有查询条件连表查询。
优化2:连表查询时,关联的id没有建立索引,果断建立索引
优化3:使用的是left join ,改为inner join查询。