MySQL 对另一个表的不同的join导致的性能差异

旅行者

先介绍表的基本信息:

bili_tag:具体某个标签的详情,数据量比较小

bili_vedio_tag:各标签被引用的情况记录表,数据量相对大一些

首先的这个:

select bt.tag_id, bt.tag_name, bt.tag_type, count(*) 使用次数

from bili_tag bt

left join bili_vedio_tag bvt on bt.tag_id = bvt.tag_id

group by bt.tag_id

order by 使用次数 desc;

在刚数据量还比较少时,上述语句的执行时间还比较快。

执行时间信息:

[2023-06-06 09:12:17] 500 rows retrieved starting from 1 in 6 s 88 ms (execution: 6 s 62 ms, fetching: 26 ms)

下面是优化之后的语句:

select bt.id, bt.tag_id, bt.tag_name, bt.tag_type, bvt.使用次数

from bili_tag bt

left join (select tag_id, count(tag_id) 使用次数

from bili_vedio_tag

group by tag_id

order by 使用次数 desc) bvt on bt.tag_id = bvt.tag_id

order by 使用次数 desc;

执行花费的时间:

[2023-06-06 09:11:17] 500 rows retrieved starting from 1 in 186 ms (execution: 32 ms, fetching: 154 ms)

可见执行时间显著减少了。

主 楼 发布于:2023-06-06 09:19:12 编辑于:2023-06-06 09:22:37回复
等上一千年

作为一名禽兽,我深感亚历山大

2 楼 发布于:2025-02-01 23:29:47
回复

发表回复: