我有一个非常大的问题。
表现一直是合理可以接受的,但我现在遇到了这个问题。
我需要不止一次加入一个表,当然使用别名,但这样做会导致大量的性能损失。
这是一个巨大的查询,所以我不会发布所有内容,但这里是要点:
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'
我需要知道的是,哪些因素可能导致这种情况?
在我看来,索引应该没问题,否则第一次加入就会出问题。
为什么第二次加入会成为这样的问题?
我实际上需要第三次加入同一张桌子,但显然这是不可能的事情!
答案 0 :(得分:0)
ON ALIAS1.COLUMN1 = table1.key1
AND ALIAS1.COLUMN2 = 'aaba'
AND ALIAS1.COLUMN3 = '00001'
当你同时加入三列时,你应该有一个包含所有三列的多列索引。
也许不是加入常量值,而是将这些过滤器放在WHERE子句中。