DB2 大数据量表查询求优化

时间:2023-01-10 11:53:07
对三张大数据量表通过left join 进行查询, 第一张表700万数据 第二张表300万数据 第三张表6000万数据。

求优化。

7 个解决方案

#1


索引如何,SQL语句是什么,要达到什么目的

#2


索引基本都建立了 
select distinct a.card_no from card_info a 
left join cardno g on a.card_no=g.cardno 
left join t_fin_coldue t on t.c_ply_no = g.polno
where a.status = '680203' and t.c_edr_no='' 
现在是数据量太大 根本无法查询出结果,进入当机状态。

#3


在连接字段上建立过索引没有?为什么用LEFT JOIN,用INNER JOIN 不行?

#4


inner join 效果在这种大数据上 区别不大, 连接字段没有单独建立索引, 是否需要为连接字段单独建立索引?

#5


单独建立索引测试一下

#6


语句改为如下,你的查询用不上LEFT JOIN。
引用
select distinct a.card_no 
from card_info a  inner join cardno g on a.card_no=g.cardno  
inner join t_fin_coldue t on t.c_ply_no = g.polno
where a.status = '680203' and t.c_edr_no=''  


另外先创建如下索引。
create index x1 on card_info(status)
create index x3 on card_info(card_no)
create index x2 on cardno(cardno)
create index x5 on t_fin_coldue(c_ply_no)
create index x4 on t_fin_coldue(c_edr_no)


更详细的优化还要看你的数据分布。

比如 card_info 表中符合 status = '680203'的记录有多少条大概?
t_fin_coldue表中符合c_edr_no=''  的记录有多少条。 
各表中主键是什么。

#7


还是不行,效率依旧没提升

#1


索引如何,SQL语句是什么,要达到什么目的

#2


索引基本都建立了 
select distinct a.card_no from card_info a 
left join cardno g on a.card_no=g.cardno 
left join t_fin_coldue t on t.c_ply_no = g.polno
where a.status = '680203' and t.c_edr_no='' 
现在是数据量太大 根本无法查询出结果,进入当机状态。

#3


在连接字段上建立过索引没有?为什么用LEFT JOIN,用INNER JOIN 不行?

#4


inner join 效果在这种大数据上 区别不大, 连接字段没有单独建立索引, 是否需要为连接字段单独建立索引?

#5


单独建立索引测试一下

#6


语句改为如下,你的查询用不上LEFT JOIN。
引用
select distinct a.card_no 
from card_info a  inner join cardno g on a.card_no=g.cardno  
inner join t_fin_coldue t on t.c_ply_no = g.polno
where a.status = '680203' and t.c_edr_no=''  


另外先创建如下索引。
create index x1 on card_info(status)
create index x3 on card_info(card_no)
create index x2 on cardno(cardno)
create index x5 on t_fin_coldue(c_ply_no)
create index x4 on t_fin_coldue(c_edr_no)


更详细的优化还要看你的数据分布。

比如 card_info 表中符合 status = '680203'的记录有多少条大概?
t_fin_coldue表中符合c_edr_no=''  的记录有多少条。 
各表中主键是什么。

#7


还是不行,效率依旧没提升