Oracle SQL:为特定所有者分组高效统计管理员数量
解决方案
方法1:左连接+分组统计
通过LEFT JOIN关联groups表与admins表,再按分组ID聚合统计管理员数量。只要admins表的groupId字段存在索引,Oracle会通过索引快速定位目标分组的管理员数据,避免全表扫描。
SELECT g.groupId, g.owner, COUNT(a.adminId) AS adminCount FROM groups g LEFT JOIN admins a ON g.groupId = a.groupId WHERE g.owner = 123 GROUP BY g.groupId, g.owner ORDER BY g.groupId;
方法2:关联子查询
针对每个分组单独执行统计子查询,同样依赖admins表groupId上的索引,确保每次子查询仅扫描对应分组的管理员数据,而非全表。
SELECT g.groupId, g.owner, (SELECT COUNT(*) FROM admins a WHERE a.groupId = g.groupId) AS adminCount FROM groups g WHERE g.owner = 123 ORDER BY g.groupId;
关键优化前提
必须为admins表的groupId字段创建B树索引,否则上述写法仍可能触发全表扫描:
CREATE INDEX idx_admins_groupid ON admins(groupId);
两种写法均会保留无管理员的分组(adminCount显示为0),完全匹配预期结果。
内容的提问来源于stack exchange,提问作者Maga
相关产品推荐
相关产品推荐

