You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TOP查询中COUNT子查询的执行次数及优化方案

SQL子查询执行次数问题及优化方案

原SQL语句:

SELECT TOP 100 *, (SELECT COUNT(*) FROM Machines WHERE Speed <=1500) AS RowCount FROM Machines WHERE Speed <=1500;

子查询执行次数说明

这个嵌入的子查询属于不相关标量子查询(未引用外部查询的字段),现代数据库优化器通常会自动识别这类无关联的统计逻辑,仅执行一次。但在部分场景下(比如优化器选择了低效执行计划),可能会跟着主查询返回的100行,每行重复执行一次子查询。

让子查询仅执行一次的优化方案

如果遇到子查询被重复执行的情况,可通过以下两种方式修改SQL,确保统计逻辑只执行一次:

方式1:交叉连接独立统计结果

把统计逻辑单独封装成一个数据集,通过交叉连接和主查询关联,统计操作只会执行一次:

SELECT TOP 100 m.*, rc.RowCount
FROM Machines m
CROSS JOIN (SELECT COUNT(*) AS RowCount FROM Machines WHERE Speed <=1500) rc
WHERE m.Speed <=1500;

方式2:使用窗口函数

利用窗口函数COUNT(*) OVER()直接统计当前结果集的总行数,只需扫描一次表即可同时完成数据查询和统计:

SELECT TOP 100 *, COUNT(*) OVER() AS RowCount
FROM Machines
WHERE Speed <=1500;

内容的提问来源于stack exchange,提问作者Wes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:38:10