我有一个巨大的表,其中包含大约2.5亿行。我对此表只有SELECT权限。我的目的是查询特定列的不同记录。我正在使用查询
select var1, count(*)
from hr.hugetable
group by var1
此查询大约需要15分钟才能完成。 var1上没有索引,我无法添加它。有没有办法优化此查询以更快地获取结果?这个查询也会这样做(我不需要计算记录,只有不同的值),但我认为它并不快。
select distinct Var1
from hr.hugetable
答案 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的参与。