[英]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.