温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql - How improve select query performance in 10M+ records table?

sql - 如何提高10M +记录表中的选择查询性能?

发布于 2020-03-27 11:48:10

我的表有超过1000万行,并且我使用带有绑定变量的简单查询(在我的情况下,无法按主键ID进行搜索)。

该表如下所示:

Col1   Col2   Col3   Col4   Col5   Col6

和查询就像

select distinct col1  
from table ;

select distinct col2 
where col1 = :bind ;

select distinct col3 
where col1 = :bind1 and col2 = :bind2 ;
.
.

select distinct col6 
where col1 = :bind1 and col2 = :bind2 and col3 = :bind3
  and col4 = :bind4 and col5 = :bind5 

所有这些查询的结果都不大-在MAX处少于100条记录-但是性能太慢。

如何改善呢?

查看更多

查看更多

提问者
osfar
被浏览
53
Gordon Linoff 2019-07-04 00:43

您可以在添加索引(col1, col2, col3, col4, col5)这可以用于所有查询:

create index idx_t_5 on t(col1, col2, col3, col4, col5);

如果这不可能并且列具有相同的类型,则可以在Oracle 12c +中使用横向联接将其组合为一个查询:

select distinct which, col
from t cross apply
     (select 'col1' as which, t.col1 as col from dual union all
      select 'col2', t.col2 from dual where t.col2 = :bind2 union all
      . . .
     ) t
where col1 = :bind1;

这将只扫描表一次,从而提高了性能。

发布
问题

分享
好友

手机
浏览

扫码手机浏览