我的程序查询需要19.546s,您可以在下面的快照底部看到。你可以看到总数据是60370项。程序查询需要很长时间,19.546s太长了。
那么,有没有一种优化我的程序的方法?这是我的程序:
BEGIN
declare icount int default 0;
declare exit handler for SQLEXCEPTION set out_a=1;
select count(*) into icount from P01 where P0101=in_a;
if icount=0 THEN
set out_a=1;
set out_b=0;
set out_c='';
set out_d='';
ELSE
set out_a=0;
select P0106,P0107,P0108 into out_b,out_c,out_d from P01 where P0101=in_a;
if in_b=1 then
select P0202,P0203,P0204,P0205 from P02 where P0201=in_a and P0204=out_b+1 order by P0202;
ELSE
select P0202,P0203,P0204,P0205 from P02 where P0201=in_a and P0204>=out_b+1 order by P0202;
end if;
end if;
END
有没有办法减少程序花费的时间?
修改
如果我查询我的表p02
,它将花费20 + s:
select * from p02;
那么,问题可能在哪里?
答案 0 :(得分:0)
在表P02
上创建索引:
create index i_P0201 on P02(P0201);
create index i_P0202 on P02(P0202);
create index i_P0204 on P02(P0204);
create index i_P0101 on P01(P0101);
避免对查询进行算术运算:P0204>=out_b+1
,只需使用计算值,如:
set @out_b_plus1 = out_b+1;
在查询中使用该值:
`P0204 >= @out_b_plus1`
因为你的表有大量数据,所以优化可能会少几秒。