我有一个结构如下的表
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,它添加了基于表达式的索引)。