【问题标题】:How to Pre Stage Queries on SQL Server?如何在 SQL Server 上预阶段查询?
【发布时间】:2016-05-03 12:27:20
【问题描述】:

我一直在寻找如何加快 sql 密集型应用程序的提示并找到 this particularly useful link

在第 6 点他说

  1. 做前期数据 这是我最喜欢的主题之一,因为它是一种经常被忽视的古老技术。如果您有报告或 将执行类似连接的过程(或者更好的是一组) 大表,它可以为您预先暂存数据 提前加入表格并将它们持久化到表格中。现在 报告可以针对该预先安排的表运行,并避免大 加入。

您并不总是能够使用此技术,但如果可以,您将 发现这是节省服务器资源的好方法。

请注意,许多开发人员通过以下方式解决此连接问题 专注于查询本身并围绕 加入,这样他们就不必再次输入加入条件,并且 再次。但是这种方法的问题是查询仍然运行 对于每一个需要它的报告。通过预先暂存数据,您可以运行 只加入一次(比方说,在报告前 10 分钟)和其他人 避免大连接。我无法告诉你我有多喜欢这种技术。 在大多数环境中,有一些流行的表可以连接所有 时间,所以他们没有理由不能预先上演

据我了解,您只需加入表一次,几个 SQL 查询就可以从中“受益”。对于我正在使用的应用程序来说,这看起来非常有趣。

问题是,我一直在寻找pre staging data,但找不到任何似乎与该技术相关的东西。也许我错过了一些关键字?

我想知道如何在 SQL Server 中使用所描述的技术。该链接说这是一种旧技术,所以我使用 SQL Server 2008 应该不是问题。

我想要的是:我有几个连续运行的SELECT 查询。它们都加入了相同的 7-8 个表,而且它们都非常重,这会影响性能。所以我正在考虑加入他们,运行查询,然后他们删除这个中间表。如何/可以做到吗?

【问题讨论】:

  • 嗯。 . .您可能需要考虑“临时表”或中间表。请注意,如果情况发生变化,这种方法可能会导致维护噩梦。

标签: sql-server sql-server-2008 join


【解决方案1】:

如果您的查询满足索引视图的要求,那么您可以创建一个具体化查询结果的对象。这意味着它将始终是最新的。

否则,您需要自己编写代码来实现它。要么按计划急切地进行,要么可能在第一次请求时,然后缓存一段您认为可以接受的时间。

第二种方法不是火箭科学,可以使用TRUNCATE ... INSERT ... SELECT 处理中等数量的数据,或者如果数据很大并且存在可能正在访问缓存结果集的并发查询,则可以使用ALTER TABLE ... SWITCH


关于您的编辑,您似乎只需要创建一个#temp 表并将连接结果插入其中。然后为几个 SELECT 引用 #temp 表并将其删除。虽然不能保证这会提高性能,而且问题中的细节不足甚至无法猜测。

【讨论】:

  • 您希望我提供哪些详细信息?
  • @PedroBraz 我不是自愿调整您的查询。试试看它是否有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多