Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择查询与查看_Sql_Sql Server_Aggregate - Fatal编程技术网

Sql 选择查询与查看

Sql 选择查询与查看,sql,sql-server,aggregate,Sql,Sql Server,Aggregate,通常,我们定期使用SQL作业将事务数据聚合到一个表中。现在,客户需要实时数据,因此1小时或1小时太高。团队建议不要在几分钟内运行作业,而是创建一个视图,其中包含从事务表本身选择数据的逻辑 但我的困惑在于selectquery和View之间与性能相关的任何差异。以周期性的方式将数据放入聚合表并从此聚合中进行选择很容易,因为 1.它不影响主表 Direct transactions表中的Direct select语句会影响频繁发生的插入操作。如果我创建一个视图,我认为这个概念与select语句相同。

通常,我们定期使用SQL作业将事务数据聚合到一个表中。现在,客户需要实时数据,因此1小时或1小时太高。团队建议不要在几分钟内运行作业,而是创建一个视图,其中包含从事务表本身选择数据的逻辑

但我的困惑在于selectquery和View之间与性能相关的任何差异。以周期性的方式将数据放入聚合表并从此聚合中进行选择很容易,因为 1.它不影响主表

Direct transactions表中的Direct select语句会影响频繁发生的插入操作。如果我创建一个视图,我认为这个概念与select语句相同。现在我们也从主表中进行选择。还是我的理解错了


请建议最好的方法以及为什么

一个好的方法是创建视图和配置数据库。是的,检查视图是否是一个好的解决方案的最佳方法是创建视图并测试结果

这里提出了一个类似的问题:

一个好的方法是创建视图并分析数据库。是的,检查视图是否是一个好的解决方案的最佳方法是创建视图并测试结果

这里提出了一个类似的问题:

如果我创建一个视图,我认为这个概念与select语句相同

正确,最简单形式的视图只不过是保存的查询定义。在查询中使用此视图时,定义将扩展到外部查询,并相应地进行优化。没有性能优势。当然,对于索引视图来说,情况并非如此,在索引视图中,视图实质上成为自己的表,使用
NOEXPAND
query提示将停止扩展定义,并将仅从视图的索引中读取。由于这是一个聚合查询,尽管我怀疑索引视图甚至不可能实现,更不用说可行的解决方案了

关于使用表存储聚合的下一部分更难回答。是的,这可能会提高性能,但代价是没有最新的数据,而且还必须维护表。这是否是一个合适的解决方案完全取决于您的需要、数据的最新程度、需要的频率以及(a)填充报告表所需的时间(b)自行运行查询

例如,如果运行查询需要20秒,但一天只需要两次,那么没有必要每小时运行此查询来维护一个报告表来帮助一天运行两次的查询

另一种选择是通过触发器维护此报告表,即当插入/更新一行时,将更改级联到报告表,然后,这将使报告表最新,但同样,如果您每天插入数百万个事务并运行几次报告,如果触发器导致的额外开销值得,您必须权衡一下

对于
SELECT
,您可以使用事务隔离级别
READ UNCOMMITTED
,以减少对写操作的影响,但与summary table选项一样,这样做的代价是,在读取未提交的事务时,最多要有第二准确的信息

最后一个选项可以是一个中间选项,每天创建一个摘要表,并按日期对主表进行分区/索引,然后您可以从每天创建的表中的历史数据中获取摘要,并将其与今天的数据合并,这些数据与正确的索引应该相对较快

如果我创建一个视图,我认为这个概念与select语句相同

正确,最简单形式的视图只不过是保存的查询定义。在查询中使用此视图时,定义将扩展到外部查询,并相应地进行优化。没有性能优势。当然,对于索引视图来说,情况并非如此,在索引视图中,视图实质上成为自己的表,使用
NOEXPAND
query提示将停止扩展定义,并将仅从视图的索引中读取。由于这是一个聚合查询,尽管我怀疑索引视图甚至不可能实现,更不用说可行的解决方案了

关于使用表存储聚合的下一部分更难回答。是的,这可能会提高性能,但代价是没有最新的数据,而且还必须维护表。这是否是一个合适的解决方案完全取决于您的需要、数据的最新程度、需要的频率以及(a)填充报告表所需的时间(b)自行运行查询

例如,如果运行查询需要20秒,但一天只需要两次,那么没有必要每小时运行此查询来维护一个报告表来帮助一天运行两次的查询

另一种选择是通过触发器维护此报告表,即当插入/更新一行时,将更改级联到报告表,然后,这将使报告表最新,但同样,如果您每天插入数百万个事务并运行几次报告,如果触发器导致的额外开销值得,您必须权衡一下

对于
SELECT
,您可以使用事务隔离级别
READ UNCOMMITTED
,以减少对写操作的影响,但与summary table选项一样,这样做的代价是,在读取未提交的事务时,最多要有第二准确的信息

最后一个选项可以是一个中间选项,每天创建一个汇总表,并按日期对主表进行分区/索引,然后您可以从每天创建的表中的历史数据中获取汇总,并将其与今天的数据合并,这些数据与正确的索引应该相对较快。