我的表格如下所示
partial_id1 | partial_id2 | partial_id3|partial_id4| Name | Address
____________|_____________|____________|___________|______|____________
并选择查询为
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秒。
如何优化此查询?如何避免连接条件中的连接?
答案 0 :(得分:2)
答案是修复数据库设计。创建一个表,你必须连接多个列以形成一个键,这不是一个很好的性能设计。
请注意,当您使用列函数(左侧是连接,右侧是RPAD)时,这消除了使用索引的可能性(除非您使用的是DB2 10.5,它添加了基于表达式的索引)。