DB2连接条件中的varchar列的连接

时间:2014-06-18 16:09:45

标签: database performance db2

我的表格如下所示

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秒。

如何优化此查询?如何避免连接条件中的连接?

1 个答案:

答案 0 :(得分:2)

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

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