如何优化程序方法?

时间:2017-03-23 02:41:45

标签: mysql stored-procedures

我的程序查询需要19.546s,您可以在下面的快照底部看到。你可以看到总数据是60370项。程序查询需要很长时间,19.546s太长了。

enter image description here

那么,有没有一种优化我的程序的方法?这是我的程序:

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;

enter image description here

那么,问题可能在哪里?

1 个答案:

答案 0 :(得分:0)

  1. 在表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);
    
  2. 避免对查询进行算术运算:P0204>=out_b+1,只需使用计算值,如:

    set @out_b_plus1 = out_b+1;
    

    在查询中使用该值:

    `P0204 >= @out_b_plus1`
    
  3. 因为你的表有大量数据,所以优化可能会少几秒。