0

我有一个很大的疑问。

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

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

这是一个巨大的查询,所以我不会全部发布,但要点是:

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'

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

在我看来,索引应该没问题,否则第一次加入将是一个问题。

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

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

4

1 回答 1

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

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

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

于 2012-10-26T15:15:17.697 回答