项目场景:
获取产品线下的所有人员
问题描述
使用了连接缓存,非主键关联
select
p.id,
p.login_code,
u.user_name,
p.product_line_code,
p.product_line_name
from
t_user_productline p
left join t_user u on u.login_code = p.login_code
where p.product_line_code = #{productLineCode}
使用 explain +‘sql’ 查看执行计划
原因分析:
非主键关联,嵌套条件添加未添加索引(刚开始未发现t_user 表和t_user_productline 表的 字符集是不一样的;t_user 表 login_code 列有唯一索引,所以最大的问题是两个表的字符集不一致导致索引失效)
解决方案:
字符集不同导致索引失效,修改字符集
alter table t_user convert to charset utf8mb4;
alter table t_user_productline convert to charset utf8mb4;
修改字符集之后,查询执行计划
现在 p 表的type 还是ALL,如果想继续优化,可添加t_user_productline 表 product_line_code(重复值)普通索引
alter table t_user_productline add index idx_product_line_code(product_line_code)
开发小白请多指教