如果我创建一个视图,我认为这个概念是一样的select语句
正确的,在其最简单形式的观点是无非是保存的查询定义。在查询中使用此视图时,定义将扩展到外部查询并进行相应优化。没有性能优势。当然索引视图并不是真的,视图本质上变成了它自己的表格,并且使用NOEXPAND
查询提示将停止定义展开,并且将简单地从视图的索引中读取。由于这是一个聚合查询,尽管我怀疑索引视图是不可能的,所以不要介意一个可行的解决方案。
关于有一个表来存储聚合的下一部分更难回答。是的,这可能会使性能受益,但代价是没有达到最新的数据,并且不得不维护表格。这是否是一个合适的解决方案完全取决于您的需求,数据需要的最新情况,需要多长时间,需要多长时间(a)填充报告表(b)自行运行查询。
例如,如果运行查询需要20秒,但每天仅需要两次,那么每小时都不会运行此查询以维护报表以帮助每天运行两次的查询。
另一个选择是通过触发器来维护这个报表,例如,当插入/更新行时,将更改级联到报表中,然后这会使报表更新,但是如果您每天插入数百万次交易并运行报告几次,您必须权衡由触发器引起的额外开销是否值得。
你可以通过使用READ UNCOMMITTED
为SELECT
事务隔离级别降低写入操作的影响,但与汇总表选项,这是以具有多达第二精确信息的成本,因为你会读取未提交的交易。
最终选项可能是一个中间选项,每天创建一个汇总表,然后按日期对主表进行分区/索引,然后您可以从每天创建的表中获取历史数据的汇总,并将其与仅当今数据应该与正确的索引相对较快。
k我明白了。对我来说,我是在shiftwise中汇总数据。所以我使用工作来运行每个班次或8个小时。对于我使用View的实时数据 – Akhil