MySQL单表两次统计查询合并方案及效率对比咨询
问题解答
能否合并为一条查询?
可以合并为一条查询,通过在同一个SELECT语句中同时计算两个COUNT(DISTINCT)聚合函数即可实现。合并后的SQL语句如下:
SELECT COUNT(DISTINCT u_id) AS participant_user_count, COUNT(DISTINCT d_id) AS submitted_design_count FROM race WHERE yid = 1;
这条语句会一次性返回两个统计结果:参与用户数(去重后的u_id数量)和参与设计数(去重后的d_id数量)。
哪种执行效率更高?
单条合并查询的执行效率通常更高,原因如下:
- 两条独立查询需要两次扫描
race表中符合yid=1的数据集,而单条查询只需要扫描一次,减少了磁盘IO和表访问的开销。 - 如果存在针对
yid的索引(或者包含yid、u_id、d_id的覆盖索引),单条查询可以直接利用索引完成统计,避免回表操作,进一步提升效率。
不过需要注意:如果表中yid=1的数据量极小,两次查询的性能差异可能不明显,但从资源消耗和代码简洁性角度,单条查询仍是更优选择。
内容的提问来源于stack exchange,提问作者gagacode
相关产品推荐
相关产品推荐

