1

我有一个包含大约 2.5 亿行的巨大表。我对该表只有 SELECT 权限。我的意图是从特定列中查询不同的记录。我正在使用查询

select var1, count(*)
from hr.hugetable
group by var1

此查询大约需要 15 分钟才能完成。var1 上没有索引,我无法添加它。有没有办法改进这个查询以更快地获取结果?这个查询也可以(我不需要计算记录,只需要不同的值),但我认为它并不快。

select distinct Var1
from hr.hugetable
4

1 回答 1

4

您应该与您的 DBA 讨论您的选项,包括为列编制索引,以及可能涉及更多的可能性,如物化视图(如果它是一个经常执行的查询)。

要考虑的一种可能性是并行化查询,但请注意,这实际上可能会减慢查询速度,具体取决于瓶颈所在的位置。Oracle有一份关于并行化的白皮书

原则上您可以添加parallel提示

select /*+ parallel */ distinct var1
from hr.hugetable

您也应该与您的 DBA 讨论这一点,特别是要使用的并行度 (DOP),以及自动 DOP 是否合适。还要阅读它在文档中的作用,并比较解释计划和时间 - 包括在不同的 DOP - 看看什么是合适的。您不想冒着影响其他用户的风险,因此请谨慎行事,并让 DBA 参与其中。

于 2013-07-30T18:42:01.120 回答