Performance 从Oracle数据库查询包含数百万行的表

Performance 从Oracle数据库查询包含数百万行的表,performance,oracle,query-optimization,data-warehouse,Performance,Oracle,Query Optimization,Data Warehouse,我有一个财务表(列:日期、月份、季度、金额、col1、col2、col3) 只是询问 select sum(amount_usd) from finance group by date …需要7秒 select sum(amount_usd) from finance group by month …需要6秒 select sum(amount_usd) from finance group by quarter …需要5秒 所以我想到了数据仓库 我创建了时间维度和层次结构 作为月份的孩

我有一个财务表(列:日期、月份、季度、金额、col1、col2、col3)

只是询问

select sum(amount_usd) from finance
group by date
…需要7秒

select sum(amount_usd) from finance
group by month
…需要6秒

select sum(amount_usd) from finance
group by quarter
…需要5秒

所以我想到了数据仓库

我创建了时间维度和层次结构

  • 作为月份的孩子的日期
  • 作为季度之子的月份
现在我被卡住了

我的事实表是什么? 如何从事实表中查询数据

这可能是一个非常基本的问题。但我对这一点还不熟悉

谢谢

“因此,我的简单查询需要时间,需要考虑数据 仓库概念……”

七秒并不慢。至少,不是“需要数据仓库”慢。数据仓库是一种战略性(通常是企业级)环境,而不是一种调优技术

但是,我同意,对于等待屏幕刷新的OLTP用户来说,这可能会令人恼火。您需要做的是调整查询。你说你有索引:但是如果你对整个财务表求和,那么你可能不想使用索引。如果您有企业版许可证和多个具有备用容量的CPU,那么并行查询可能是一个更好的主意

如果您每天多次运行这些财务查询,您可能会从预聚合中获得一些好处,但似乎不太可能通过减少运行时间来证明维护物化视图的开销是合理的

“因此,我的简单查询需要时间,需要考虑数据 仓库概念……”

七秒并不慢。至少,不是“需要数据仓库”慢。数据仓库是一种战略性(通常是企业级)环境,而不是一种调优技术

但是,我同意,对于等待屏幕刷新的OLTP用户来说,这可能会令人恼火。您需要做的是调整查询。你说你有索引:但是如果你对整个财务表求和,那么你可能不想使用索引。如果您有企业版许可证和多个具有备用容量的CPU,那么并行查询可能是一个更好的主意


如果您每天多次运行这些财务查询,您可能会从预聚合中获得一些好处,但似乎不太可能通过减少运行时间来证明维护物化视图的开销是合理的。

这是从“我的查询运行缓慢”到“我需要数据仓库”的一大步。有多少行是“百万”行,您是否已经尝试过使用索引、分区表或其他方法来提高性能?数据仓库可能会使用与您描述的查询非常相似的查询,因此您可能需要更具体地说明您在此处所期望的内容。日期列看起来可能是划分数据的理想列。@Pondlife。。。事实上,我想知道…我的维度如何帮助性能…就像我创建了时间维度,但我什么时候会使用它…事实表可以是我的财务表…还是我必须有单独的财务表…是的,表中的所有索引都将有大约100万行…所以我的简单查询需要时间并考虑使用数据仓库概念。。。。Thanks@Avi一百万行对于任何现代数据库引擎来说都是一个小(ish)表,几乎可以肯定,仅仅为此构建数据仓库是不值得的。正如APC所回答的,您需要专注于优化查询(可能还有系统性能),而不是创建一个全新的数据库。这是从“我的查询运行缓慢”到“我需要一个数据仓库”的一大步。有多少行是“百万”行,您是否已经尝试过使用索引、分区表或其他方法来提高性能?数据仓库可能会使用与您描述的查询非常相似的查询,因此您可能需要更具体地说明您在此处所期望的内容。日期列看起来可能是划分数据的理想列。@Pondlife。。。事实上,我想知道…我的维度如何帮助性能…就像我创建了时间维度,但我什么时候会使用它…事实表可以是我的财务表…还是我必须有单独的财务表…是的,表中的所有索引都将有大约100万行…所以我的简单查询需要时间并考虑使用数据仓库概念。。。。Thanks@Avi一百万行对于任何现代数据库引擎来说都是一个小(ish)表,几乎可以肯定,仅仅为此构建数据仓库是不值得的。正如APC所回答的,您需要关注于优化查询(可能还有系统性能),而不是创建一个全新的数据库。