如何更好地处理耗时/CPU 密集查询?
How is it better to handle time-consuming / CPU intensive queries?
假设这样一种情况,例如我们有一些SQL Server
的实例(事实并非如此)。我们有一个 Java
应用程序正在使用 Spring
堆栈。
有些查询已经优化,但由于聚合数据的复杂逻辑,它们仍然很慢。
我有几种方法(目前是短期的):
- 继续调整(如创建视图)并实施作业以在
SQL server
中重新计算这些数据,例如每 5 分钟 并将其存储在单独的 table。 (是的,这不是很好的解决方案,但仍然如此)。
- 实施某种机制来在后台计算/聚合该数据。可能实现 Lambda-architecture. I've already looked at Apache Spark 和其他部分的一部分。
在 optimized 下,这意味着这些查询使用了正确的索引并且一切都是 'tuned'.
我知道这不是更多提案/讨论的问题。但我还是被质疑了。
根据上述情况,处理这种情况的更好方法是什么?
更新 #1
基于 What you can and can't do with Indexed views for MS SQL Server 索引视图不是可行的方法,因为它们不支持 COUNT、MIN、MAX、TOP、外连接,或其他一些关键字或元素。您无法修改基础 table 和列。该视图是使用 WITH SCHEMABINDING 选项创建的。
更新 #2
在这方面花了一些时间。为了简单起见,我暂时停止使用物化视图。
所以,不同的数据库引擎都有一个Materialized View. SQL server has the equivalent with it's Indexed Views的概念。这些专为您的确切用例而设计。在基本上 "rolling your own" 实体化视图之前,我会强烈考虑这些方法。
假设这样一种情况,例如我们有一些SQL Server
的实例(事实并非如此)。我们有一个 Java
应用程序正在使用 Spring
堆栈。
有些查询已经优化,但由于聚合数据的复杂逻辑,它们仍然很慢。
我有几种方法(目前是短期的):
- 继续调整(如创建视图)并实施作业以在
SQL server
中重新计算这些数据,例如每 5 分钟 并将其存储在单独的 table。 (是的,这不是很好的解决方案,但仍然如此)。 - 实施某种机制来在后台计算/聚合该数据。可能实现 Lambda-architecture. I've already looked at Apache Spark 和其他部分的一部分。
在 optimized 下,这意味着这些查询使用了正确的索引并且一切都是 'tuned'.
我知道这不是更多提案/讨论的问题。但我还是被质疑了。
根据上述情况,处理这种情况的更好方法是什么?
更新 #1
基于 What you can and can't do with Indexed views for MS SQL Server 索引视图不是可行的方法,因为它们不支持 COUNT、MIN、MAX、TOP、外连接,或其他一些关键字或元素。您无法修改基础 table 和列。该视图是使用 WITH SCHEMABINDING 选项创建的。
更新 #2
在这方面花了一些时间。为了简单起见,我暂时停止使用物化视图。
所以,不同的数据库引擎都有一个Materialized View. SQL server has the equivalent with it's Indexed Views的概念。这些专为您的确切用例而设计。在基本上 "rolling your own" 实体化视图之前,我会强烈考虑这些方法。