在 SQL 服务器中查看与 Table 的对比
View vs Table in SQL Server
TASK: 出于仪表板的目的,我有一个复杂的 select 查询,其中包含许多从多个 table 获取数据的连接和子查询s.
选项 1: 我可以使用该 SELECT
查询创建一个视图,Spotfire 可以将该视图用作其仪表板的数据源。
选项 2: 我可以使用那个 SELECT
查询作为源来创建一个 SSIS 包,我可以将数据加载到一个 table 每天一次。 Spotfire 可以使用单个 table 作为其仪表板的来源。
注意:我不想实时使用它。仪表板可以每晚更新(每天一次)。
我的理解:我知道视图基本上是一个存储的SELECT
查询。如果我创建一个视图,每次当用户访问仪表板时,它都会尝试访问该视图。这意味着,在后端视图中将命中数据库中的底层 tables。取而代之的是,我可以简单地让 SSIS 每天加载一次特定的 table。因此 Dash 将触及这个 table 而不是实际的高度事务性 tables.
你能给我一个选项和解释吗?
在某种程度上,这是一个见仁见智的问题。但是,您定义了以下情况:
- 仪表板每天只更新一次,因此白天应该保持不变。
- 基础 table 正被用于交易目的。
- 所需的查询至少有些复杂。
结合起来,这些强烈主张在半夜创建一个仪表板 table,以简化查询。
在许多环境中,底层事务 table 不直接用于报告。相反,table 被复制到报告环境(定期或实时),报告环境用于报告。
您似乎已经涵盖了大部分问题。
View 的优势在于它是实时的,截至目前报告是 运行。缺点是它是系统上的实时负载,不仅包括 CPU、RAM 和磁盘 I/O,还包括(通常更重要的)table 和行锁。
SSIS 包的优势在于将您的报告负载与生产负载断开(再次强调:尤其是减少锁定争用在这里是一个胜利),并且能够创建特殊的仅报告索引来制作您的报告运行 更快,而不必维护这些索引,因为实时更改 tables (特别是因为用于报告的索引通常与用于生产更新的索引非常不同)。缺点是增加了复杂性和故障点(如果 SSIS 包开始失败怎么办?)、陈旧数据,以及如果您只是移动到同一台服务器上的特殊 table,报告仍然使用一些 CPU、生产服务器的磁盘和 RAM 资源,即使它已减少。
就个人而言,我更喜欢使用视图,直到我不使用 :) 为止。
我的意思是,一旦我开始使用 SSIS 包将数据移动到单独的报告位置,我就想 "all-in" 执行该过程。不要只在同一台服务器上做一份报告或 table;获得一个单独的报告服务器(或者甚至是一个成熟的数据仓库解决方案)并尽可能多地转移到它上面。然后确保有人负责监控它的健康状况和迁移包的健康状况。我还将开始努力改变企业文化,让每个人都对 table 看到昨天的数据感到舒服。但我想尽可能地推迟它,并坚持使用 Views,直到我开始看到有切实的理由转向某种真正的数据仓库或分析产品,这将证明这一成本是合理的。
首先我同意周围的评论和答案取决于您的要求。根据我的经验,VIEW 选项一开始总是很吸引人,因为它易于实施和维护,因为移动部件较少。
然而,随着数据量的增加,仪表板的性能和对底层事务系统的负面性能影响最终导致重构实现。
在我们的场景中,将报告的关注点与交易系统分开是正确的做法。为我们的报告实施实体化视图(想想数据快照),消除了困扰用户并给系统带来坏名声的锁定、超时和服务器过载。
如果您有时间并相信您的数据量可能会显着增长,请认真考虑物化视图。
TASK: 出于仪表板的目的,我有一个复杂的 select 查询,其中包含许多从多个 table 获取数据的连接和子查询s.
选项 1: 我可以使用该 SELECT
查询创建一个视图,Spotfire 可以将该视图用作其仪表板的数据源。
选项 2: 我可以使用那个 SELECT
查询作为源来创建一个 SSIS 包,我可以将数据加载到一个 table 每天一次。 Spotfire 可以使用单个 table 作为其仪表板的来源。
注意:我不想实时使用它。仪表板可以每晚更新(每天一次)。
我的理解:我知道视图基本上是一个存储的SELECT
查询。如果我创建一个视图,每次当用户访问仪表板时,它都会尝试访问该视图。这意味着,在后端视图中将命中数据库中的底层 tables。取而代之的是,我可以简单地让 SSIS 每天加载一次特定的 table。因此 Dash 将触及这个 table 而不是实际的高度事务性 tables.
你能给我一个选项和解释吗?
在某种程度上,这是一个见仁见智的问题。但是,您定义了以下情况:
- 仪表板每天只更新一次,因此白天应该保持不变。
- 基础 table 正被用于交易目的。
- 所需的查询至少有些复杂。
结合起来,这些强烈主张在半夜创建一个仪表板 table,以简化查询。
在许多环境中,底层事务 table 不直接用于报告。相反,table 被复制到报告环境(定期或实时),报告环境用于报告。
您似乎已经涵盖了大部分问题。
View 的优势在于它是实时的,截至目前报告是 运行。缺点是它是系统上的实时负载,不仅包括 CPU、RAM 和磁盘 I/O,还包括(通常更重要的)table 和行锁。
SSIS 包的优势在于将您的报告负载与生产负载断开(再次强调:尤其是减少锁定争用在这里是一个胜利),并且能够创建特殊的仅报告索引来制作您的报告运行 更快,而不必维护这些索引,因为实时更改 tables (特别是因为用于报告的索引通常与用于生产更新的索引非常不同)。缺点是增加了复杂性和故障点(如果 SSIS 包开始失败怎么办?)、陈旧数据,以及如果您只是移动到同一台服务器上的特殊 table,报告仍然使用一些 CPU、生产服务器的磁盘和 RAM 资源,即使它已减少。
就个人而言,我更喜欢使用视图,直到我不使用 :) 为止。
我的意思是,一旦我开始使用 SSIS 包将数据移动到单独的报告位置,我就想 "all-in" 执行该过程。不要只在同一台服务器上做一份报告或 table;获得一个单独的报告服务器(或者甚至是一个成熟的数据仓库解决方案)并尽可能多地转移到它上面。然后确保有人负责监控它的健康状况和迁移包的健康状况。我还将开始努力改变企业文化,让每个人都对 table 看到昨天的数据感到舒服。但我想尽可能地推迟它,并坚持使用 Views,直到我开始看到有切实的理由转向某种真正的数据仓库或分析产品,这将证明这一成本是合理的。
首先我同意周围的评论和答案取决于您的要求。根据我的经验,VIEW 选项一开始总是很吸引人,因为它易于实施和维护,因为移动部件较少。
然而,随着数据量的增加,仪表板的性能和对底层事务系统的负面性能影响最终导致重构实现。
在我们的场景中,将报告的关注点与交易系统分开是正确的做法。为我们的报告实施实体化视图(想想数据快照),消除了困扰用户并给系统带来坏名声的锁定、超时和服务器过载。
如果您有时间并相信您的数据量可能会显着增长,请认真考虑物化视图。