Mysql-left join 遇到的问题记录

问题描述:

A表主键为key,A表记录2w条。

B表主键为key,B表记录1w条。

要求A表和B进行左外链接,查询A表所有记录,在B表没有对应记录的列设为null。

很明显使用A left join B就能满足需求

但是,问题是:

select * from A a left join B b on a.key = b.key;

在使用正常的查询的时候发现查询效率很低,需要大约70秒左右。

使用:

explain select * from A a left join B b on a.key = b.key;

显示执行计划发现并查询并没有走索引,查询量差不多就是2w*1w的笛卡尔积了。但是明明是使用key作为主键进行查询了啊,为什么不行呢?

查询了很多资料,也搜了很多优化条件,大多数说的都是尽量让条件使用索引,体检减小驱动表得到大小等方法,但是貌似都不管用。

后来仔细查看了下A表和B表的表结构,发现A表的索引key是int类型,但是B表的索引key是varchar类型!!!!!

这才是导致问题慢的主要原因,通过转换类型重新查询,发现查询时间从70s+降到1s以内。

总结:

在做表结构设计的时候,主键索引的字段类型一定要一样,名字可以不一样,但是字段类型一定要一样,不然非常影响查询效率。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值