在具有大量数据的SQL查询中使用聚合函数和视图的最佳实践是什么
select name , sum(value) from v_transactions Group by name
此视图有150,000条记录
答案 0 :(得分:0)
如果视图呈现150k行,但需要花费5分钟来聚合它们,问题在于视图的性能而不是您正在进行的聚合。
SELECT * FROM v_transactions
可能需要几乎完全相同的时间
视图可能仅针对少量行进行查询
FROM v_transaction WHERE some_key = some_value
在这种情况下,尝试查询视图的所有行可能会“误用”它。
视图可能正在执行与查询无关的工作
同样,如果视图专门用于生成您未使用的字段,则您对该视图的使用可能会被视为“误用”。
在任何情况下,因为它是一个视图,将有一个替代来源聚合。可以是v_transactions
从中获取数据的其他视图或表。
询问周围,找出您可以访问的视图,表格和功能。您可能会或可能无法访问您想要的内容,但在您进行调查之前,您将无法找到答案。
另一种可能性是name
字段是昂贵的计算。是否有另一个可以分组的字段?与名称对应的某些id
或key
?这将为您提供多种测试性能的选项......
SELECT some_id, SUM(value) FROM v_transactions GROUP BY some_id
SELECT some_id, name, SUM(value) FROM v_transactions GROUP BY some_id, name
SELECT some_id, MAX(name), SUM(value) FROM v_transactions GROUP BY some_id