Oracle PerfRoman使用sum聚合函数连接3个表

Oracle PerfRoman使用sum聚合函数连接3个表,oracle,performance,sum,Oracle,Performance,Sum,我有三张桌子 术语(id、isn、SentenceID、词根、句子长度)包含完整的语料库(超过2000万条记录) 用户术语(id、is、SentenceID、Term\u Roott、句子长度)包含用户文档信息(约100000条记录) 相关性(id、Term1、Term2、Correlation_Factor)包含静态数据,描述任意两个术语之间的相关性和相似性(包含约500000条记录) 我想找出用户文档句子和语料库中所有文档之间的相似性。通过将用户术语和语料库术语连接起来,找出相关因子,并对每

我有三张桌子 术语(id、isn、SentenceID、词根、句子长度)包含完整的语料库(超过2000万条记录) 用户术语(id、is、SentenceID、Term\u Roott、句子长度)包含用户文档信息(约100000条记录) 相关性(id、Term1、Term2、Correlation_Factor)包含静态数据,描述任意两个术语之间的相关性和相似性(包含约500000条记录)

我想找出用户文档句子和语料库中所有文档之间的相似性。通过将用户术语和语料库术语连接起来,找出相关因子,并对每个句子的结果进行汇总 我使用了这个查询

SELECT   tt.SENTENCEID ,tu.SENTENCEID,

       sum (c.CORRELATION_FACTOR)/greatest( tu.sentence_length,tt.sentence_length),
      tt.isn ,
      tu.isn  
  FROM CORRELATIONS c,
TERMS tt,
User_TERMS tu
 WHERE (tt.TERM_ROOT  = c.TERM1
AND tu.TERM_ROOT = c.TERM2 

  AND tu.ISN='22242')
   group by tt.SENTENCE_ID, tu.SENTENCE_ID, tt.isn, tu.isn,tu.sentence_length,tt.sentence_length
having 

      sum (c.CORRELATION_FACTOR)/greatest( tu.sentence_length,tt.sentence_length)>0.6;
此查询需要10分钟以上的时间。 我怎样才能把它重写得尽可能快?我需要什么索引

编辑:这是我的解释计划: |0 | SELECT语句| 2670 | 219K | 3864(1)| 00:00:47|

|*1 |过滤器| | | | ||

|2 | HASH GROUP BY | | 2670 | 219K | 3864(1)| 00:00:47|

|3 |嵌套循环| | 53383 | 4379K | 3862(1)| 00:00:47|

|*4 |散列连接| 1414 | 86254 | 1032(1)| 00:00:13|

|*5 |索引范围扫描|索引5 | 1425 | 31350 | 8(0)| 00:00:01|

|6 |索引快速全扫描|术语相关性4 | UK1 | 563K | 20M | 1020(1)| 00:00:13|

|*7 |索引范围扫描|术语索引1 | 38 | 874 | 2(0)| 00:00:01|


谓词信息(由操作id标识): 1-过滤器(和(“C”。“相关系数”)/最大(“TU”。“句子长度”,“TT”。“句子长度” H“>0.6)

4-访问(“TU”“TERM_根”=“C”“TERM2”)

5-访问(“TU”“ISN”='22242')


7-access(“TT.”TERM_ROOT“=“C.”TERM1”)

尝试向在
where
子句中使用的列和聚合函数中使用的列添加索引,如果没有查询计划,很难判断。您可能缺少上一条评论中建议的索引@Aramillo您能详细介绍一下索引“聚合函数中使用的列”吗?我不明白为什么索引
c.CORRELATION\u FACTOR
在一般情况下会提高性能。@SylvainLeroux对不起,你说得对。这个索引是没有必要的。我不知道我在想什么。是的,我在where子句和聚合函数中为所有列创建了索引,但仍然很慢,我还使用了(并行提示,ffs提示)无附加值。我正在尝试更改查询。是否有更好的查询建议?重写?使用子查询?我能做什么?我没有足够的声誉将计划作为图像上传