查询表包含来自 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 数据库的数百万行的主要内容,如果未能解决你的问题,请参考以下文章

优化查询以更新 Oracle 中的数百万数据?

具有数百万行的 Django 表

从C#中的数据中删除特殊字符后如何将dbf文件中的数百万行数据上传到SQL Server

是否可以使用 ClickHouse 查询数百万行

在包含数百万行和多个过滤器的表上创建哪些索引

数百万行的数据库设计