将聚合函数与视图一起使用的最佳实践是什么?

时间:2017-12-17 09:35:47

标签: sql sql-server

在具有大量数据的SQL查询中使用聚合函数和视图的最佳实践是什么

select name , sum(value) from v_transactions Group by name

此视图有150,000条记录

1 个答案:

答案 0 :(得分:0)

如果视图呈现150k行,但需要花费5分钟来聚合它们,问题在于视图的性能而不是您正在进行的聚合。

  • SELECT * FROM v_transactions可能需要几乎完全相同的时间


视图可能仅针对少量行进行查询

  • FROM v_transaction WHERE some_key = some_value

在这种情况下,尝试查询视图的所有行可能会“误用”它。


视图可能正在执行与查询无关的工作

  • 复杂的计算和联接以生成其他字段

同样,如果视图专门用于生成您未使用的字段,则您对该视图的使用可能会被视为“误用”。


在任何情况下,因为它是一个视图,将有一个替代来源聚合。可以是v_transactions从中获取数据的其他视图或表。

询问周围,找出您可以访问的视图,表格和功能。您可能会或可能无法访问您想要的内容,但在您进行调查之前,您将无法找到答案。


另一种可能性是name字段是昂贵的计算。是否有另一个可以分组的字段?与名称对应的某些idkey?这将为您提供多种测试性能的选项......

  • 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
  • 等等