繁体   English   中英

大量表的SQL总和

[英]SQL sum across large number of tables

目前,我们当前的数据库中的数据分布在每个商店一个表的结构中,因此特定架构可能有成千上万个表。

每个表都有相当基本的数据(事务),看起来像:

store1_table:
| id | total_revenue | net_profit | date |
| 1  | 25            | 5          |      |
| 2  | 36            | 10         |      |
| 3  | 20            | 7          |      |

我正在尝试获取特定时间段内所有商店的总销售额。

对于单个商店,性能是相当合理的,但是当我尝试查询所有表(数百个,甚至数千个)的总数时,性能会大大降低。

对于SQL查询,我正在使用SQLAlchemy,但它会生成合理的简单查询,例如:

viewport = union_all(*hundredsOfTables)
session.query(func.sum(viewport.c.net_profit))

是UNION ALL导致性能问题,数据库的结构,还是有更好的方法来检索所有表的净利润之和?

怀疑跨这么多表的union_all实际上是一个问题,请尝试首先在单个表级别上进行汇总,然后总结中间结果:

# get list of sum-queries for all tables
sub_queries = [session.query(func.sum(_.c.net_profit).label("sub_net"))
               for _ in hundredsOfTables]

# create a union subquery
u = sub_queries[0].union_all(*sub_queries[1:])
u = u.subquery("tmp")
# create a query which gets the grand-total
t = session.query(func.sum(u.c.sub_net)).scalar()
print(t)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM