不止一次加入表会导致性能下降

时间:2012-10-26 14:32:06

标签: sql oracle10g

我有一个非常大的问题。

表现一直是合理可以接受的,但我现在遇到了这个问题。

我需要不止一次加入一个表,当然使用别名,但这样做会导致大量的性能损失。

这是一个巨大的查询,所以我不会发布所有内容,但这里是要点:

SELECT table1.name,
       ALIAS1.CODE AS "Sequence"
...
FROM table1
...
LEFT JOIN table2 ALIAS1
ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'
...

这个很好,在大约90秒内运行。但是如果我再次添加相同的表,则执行时间会呈指数增长(到目前为止2小时仍然在运行):

SELECT table1.name,
       ALIAS1.CODE AS "Sequence",
       ALIAS2.CODE AS "Rating"
...
FROM table1
...
LEFT JOIN table2 ALIAS1
ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'

LEFT JOIN table2 ALIAS2
ON ALIAS2.COLUMN1 = table1.key1
AND ALIAS2.COLUMN2 = 'ffhr'
AND ALIAS2.COLUMN3 = '00107'

我需要知道的是,哪些因素可能导致这种情况?

在我看来,索引应该没问题,否则第一次加入就会出问题。

为什么第二次加入会成为这样的问题?

我实际上需要第三次加入同一张桌子,但显然这是不可能的事情!

1 个答案:

答案 0 :(得分:0)

ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'

当你同时加入三列时,你应该有一个包含所有三列的多列索引。

也许不是加入常量值,而是将这些过滤器放在WHERE子句中。

相关问题