DB2 varchar列在连接条件下的连接



我有一个结构如下的表

partial_id1 | partial_id2 | partial_id3|partial_id4| Name | Address
____________|_____________|____________|___________|______|____________

和select查询

select 
A.bla1,
A.bla2,
A.bla3
B.Name,
C.Name,
D.Name
from TABLE1 as A 
left join ABOVE_TABLE as B
on 
B.partial_id1||B.partial_id2||B.partial_id3||B.partial_id4=RPAD(A.ID1,11,'0')
left join ABOVE_TABLE as C
on 
C.partial_id1||C.partial_id2||C.partial_id3||C.partial_id4=RPAD(A.ID2,11,'0')
left join ABOVE_TABLE as D
on 
D.partial_id1||D.partial_id2||D.partial_id3||D.partial_id4=RPAD(A.ID3,11,'0')
where A.PK in ('1','2','22')

这个查询花费太多时间。如果我删除左连接,它需要<50ms,如果我保留它们,它需要大约4秒。

我如何优化这个查询?如何在连接条件下避免连接?

这个问题的答案是修复您的数据库设计。创建一个必须连接多个列以形成一个键的表,这不是一个很好的性能设计。

请注意,当您使用列函数(在左侧连接,在右侧RPAD)时,这消除了使用索引的可能性(除非您使用的是DB2 10.5,它添加了基于表达式的索引)。

最新更新