查询表包含来自 Oracle 数据库的数百万行
Posted
技术标签:
【中文标题】查询表包含来自 Oracle 数据库的数百万行【英文标题】:Querying Table containg millions of rows from Oracle database 【发布时间】:2011-12-19 10:27:49 【问题描述】:我有一个财务表(列:日期、月份、季度、amount_usd、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 秒
所以我想到了数据仓库
我已经创建了时间维度和层次结构
日期作为月份的孩子 作为季度子的月份现在我被卡住了......
我的事实表是什么? 以及如何从事实表中查询数据?
这可能是一个非常基本的问题。但我对此并不陌生。
谢谢
【问题讨论】:
从“我的查询运行缓慢”到“我需要一个数据仓库”是一大步。有多少行是“数百万”,您是否已经尝试通过使用索引、分区表或其他方法来提高性能?数据仓库可能会使用与您所描述的查询非常相似的查询,因此您可能需要更具体地了解您在这里的期望。 日期列看起来可能是您对数据进行分区的理想列。 @Pondlife...实际上我想知道..我的维度如何帮助提高性能...就像我创建了时间维度但是我什么时候使用它...事实表可以成为我的财务表..或者我必须有一个单独的...是的,表中的所有索引都将有大约 100 万行....所以我的简单查询需要时间并考虑拥有数据仓库概念....谢谢 @Avi 100 万行对于任何现代数据库引擎来说都是一个小(ish)表,几乎可以肯定,不值得为此构建数据仓库。正如 APC 所回答的那样,您需要专注于调整查询(可能还有系统性能),而不是创建一个全新的数据库。 【参考方案1】:“所以我的简单查询需要时间并考虑使用数据 仓库概念……”
七秒并不慢。至少,不会“需要数据仓库”慢。数据仓库是一种战略性(通常是企业级)环境,而不是一种调优技术。
但是,我同意等待屏幕刷新的 OLTP 用户可能会感到恼火。您需要做的是调整查询。你说你有索引:但如果你对整个 FINANCE 表求和,那么你可能不想使用索引。如果您拥有 Enterprise Edition 许可证和多个具有备用容量的 CPU,那么并行查询可能是一个更好的主意。
如果您每天多次运行这些财务查询,您可能会从预聚合中获得一些好处,但经过时间的减少似乎不太可能证明维护物化视图的开销是合理的。
【讨论】:
以上是关于查询表包含来自 Oracle 数据库的数百万行的主要内容,如果未能解决你的问题,请参考以下文章