MySQL 使用LEFT JOIN关联表统计子表记录数

6,846 阅读1分钟

背景

最近遇到一个业务主表关联子表,主键关联子表查询子表记录总数,目前有两种方式:

一、常用select查询方式

比如,常用操作方式

select *,(select count(字段1) from aa where id=t.id)cnt from test t;

这样写看起确实没什么问题,但是随着系统运行时间过久,你会发现sql执行很慢,以至于前端会报time out异常,这其中原理就不讲了,举例如下:

image.png

这一段代码执行时间花费了28秒左右,这....

image.png

我分析来了一下,整个sql最耗时间的是这句

image.png 因为这张表数据太多了,全量查询肯定会造成数据变慢。

二、LEFT JOIN 方式

image.png 这里最主要就是left Join执行count函数的使用

image.png 改造后的执行时间大概在2秒左右,这差距真大。

image.png

以上内容仅作为记录知识使用,不对之处请指出。