如何从一张巨大的桌子上更快地获得明显的行?

时间:2013-07-30 17:42:48

标签: sql performance oracle group-by distinct

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

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

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

select distinct Var1
from hr.hugetable

1 个答案:

答案 0 :(得分:4)

您应该与您的DBA讨论您的选项,包括索引列,以及可能更具参与性的可能性,例如物化视图,如果它是经常执行的查询。

要考虑的一种可能性是并行化查询,但请注意,这实际上可能会降低它的速度,具体取决于瓶颈所在。有white paper from Oracle on parallelisation

原则上您可以添加parallel hint

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

您应该与DBA讨论这个问题,特别是要使用的并行度(DOP),以及自动DOP是否合适。还要阅读它的作用in the documentation,并比较解释计划和时间 - 包括在不同的DOP - 以查看什么是合适的。您不希望冒险影响其他用户正在做的事情,因此谨慎行事,以及DBA的参与。