统计不同公司订单总额用多次SQL查询还是单查后遍历计算更合理
最优方案:直接使用单条GROUP BY SQL完成聚合
你提到的两种方案都存在明显的资源浪费,首选写法如下:
SELECT company, SUM(order_amount) AS total_amount FROM orders GROUP BY company;
数据库原生的聚合、分组逻辑经过专门优化,同时只返回100条左右的聚合结果,不管是数据库计算开销、网络传输开销还是应用层处理开销都是最低的。
两种可选方案的优劣对比
如果因为特殊场景必须在你提到的两个方案中选一个,优先级是「单条查询拉全量后应用层累加」> 「循环100次查询」:
- 循环100次查询的方案完全不推荐:100次数据库请求的网络往返开销远高于单次请求,同时会给数据库带来不必要的并发查询压力,后续如果公司数量增长,性能会线性下降。
- 全量拉取后应用层累加的方案仅适合你同时需要用到订单明细做其他计算的场景:如果仅需要统计总额,该方案会白白浪费全量订单数据的传输带宽和应用侧内存,属于把数据库的本职工作搬到应用层执行,效率更低。
内容的提问来源于stack exchange,提问作者Mark MyEmail
相关产品推荐
相关产品推荐

