先介绍表的基本信息: 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)
可见执行时间显著减少了。 |