2021-05-31 sql count(*) join慢查询优化

本文探讨了数据库JOIN操作的性能问题,通过实例展示了不同JOIN类型导致的时间差异。分析指出,JOIN的效率主要取决于表间的关系和数据量。在A-B连接中,由于一对一映射,执行时间较长;而在B-C连接中,由于C表数据量小,多对一关系使得JOIN更快。建议根据WHERE条件优化查询,避免全表JOIN,以提升查询速度。
摘要由CSDN通过智能技术生成

同样两张表join,结果也都是三百万量级的,但是为什么A j B 就是10s,B j C就是0.7s呢?
select count() from A join B on A.id = B.aId;
select count(
) from B join C on B.pId = C.pId;
后面explain 发现他们的rows差别很大,一个是2852831,1;另一个是4613,884;
所以原因应该就是A- B是一一对应的,表的大小都是三百万,而B- C是多对一关系,C的量级只有5000,所以join起来快很多。核心问题还是join的表大小不同,难怪那么奇怪同样是join差别这么大。

select count() from A join B on A.id = B.aId join C on B.pId = C.pId;
这玩意就非常慢,所以根据where条件来决定优化,如果没有需要用到B、C表的where条件,那么由于上述的对应关系,我只需要使用select count(
) from A (+where xx) 就可以得到结果,这样显然很快,如果有用到B、C表的where条件,那么才全部join起来计算,这时候由于有where筛选所以也会达到可以接受的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值