宁波大型网站制作技能培训班有哪些
结论:关联表的列的字符集不一致导致的
场景:user_t(用户表)、org_t(机构表),user_t的org_id和org_t的id是一对一关系
1.explain发现org_t表未走索引,但是org_t的id字段默认存在主键索引,所以肯定不是未建索引导致的
explain select t1.account,t2.name from user_t t1
left join org_t t2
on t1.org_id = t2.id
where t1.sex = '0';
2.查看org_t.id的字符集和排序规则为utf8 utf8_general_ci
show full columns from org_t;
3.查看user_t.org_id的字符集和排序规则为utf8mb4 utf8mb4_general_ci
show full columns from user_t;
4.把user_t.org_id的字符集和排序规则调整为utf8 utf8_general_ci
alter table user_t modify column org_id varchar(20)
character set utf8 collate utf8_general_ci default null comment '机构ID';
5.再次执行explain,发现org_t表走了索引,效率大大提升
explain select t1.account,t2.name from user_t t1
left join org_t t2
on t1.org_id = t2.id
where t1.sex = '0';