如何处理耗时/ CPU密集型查询更好?

时间:2015-09-30 16:08:17

标签: java sql sql-server architecture

假设情况,例如我们有一些SQL Server的实例(事实并非如此)。我们有一个使用Java堆栈的Spring个应用程序。

有些查询已经优化但由于聚合该数据的复杂逻辑,它们仍然很慢。

我有几种方法(目前这些是短期的):

  1. 继续进行调整(如创建视图)并实现作业以在SQL server中重新计算这些数据,例如每 5分钟并将其存储在单独的表中。 (是的,它不是那么好的解决方案,但仍然)。
  2. 实现某种机制来在后台计算/聚合该数据。可能实现Lambda-architecture的一部分。我已经看过Apache Spark和其他人了。
  3. 优化下,这意味着这些查询正在使用正确的索引,所有内容都已“调整”。

    我知道这不是一个问题,因为更多的提案/讨论。但我仍然受到质疑。

    基于上述情况处理这种情况的更好方法是什么?

    更新#1

    基于What you can and can't do with Indexed views对于MS SQL Server,索引视图不是可行的方式,因为它们不支持 COUNT,MIN,MAX,TOP,外连接或其他一些关键字或元素。您无法修改基础表和列。使用WITH SCHEMABINDING选项创建视图。

    更新#2

    花了一些时间在这上面。为了简单起见,我现在停止使用物化视图。

1 个答案:

答案 0 :(得分:1)

因此,不同的数据库引擎具有Materialized View的概念。 SQL服务器具有等效的Indexed Views。这些是专为您的确切用例而设计的。在基本上“滚动你自己的”物化视图之前,我会强烈考虑这些方法。