yanpingsha 发表于 2008-07-07 10:30

[求助]存储过程优化的问题,急求大虾们帮忙

小弟目前没有积分,对不住各位大大了,以后有积分一定补上.
foreach SELECT grpIndex,county,grpid
                INTOvgrpIndex,vtempcountyID,bgrpid
                FROM table_group
         
            SELECT count(*)
            INTO vusers
            FROM table_grpuser
            WHERE grpIndex=vgrpIndex;
               
               
          SELECT count(*)
            INTO vuserfeeuser
            FROM table_grpuser
            WHERE grpIndex=vgrpIndex and type='1';
            .....
            .....
               
            insert into table_tmp
            values(.......)
            --将上面相关值插入tmp表
         
end foreach


foreach select locationid,countryid
into vlocationid,vcountryid
from location

SELECT sum(grpuser),sum(grprulednum)
      INTO vusernum,vrulednum
      FROM table_temp
      WHERE location=vlocationID and county=vcountyID;
........
....
   
end foreach
语句如上,grpuser表的数据量在120万左右,group表在3万左右,请问第一个foreach循环中有好的优化方式么?
第二个循环里面的sum是不是也是影响效率的原因?

另外foreach执行的机理是什么?是先执行select取出一个表的所有数据再执行下一个操作,还是select一条数据,然后执行下一个数据呢?

ivhb 发表于 2008-07-07 21:39

foreach x in group
   select * from grpuser ....
end foreach

相当于执行了3万次的120万数据的搜索。一般而言效率不会太好。
你应当尽可能的避免大次数的循环。
比如你可以用grpuser和group表直接关联,让其只做一次group by
通常来说,只要你的关联是在索引上,这样“批量”的工作方式是最适合数据库的。

blackuhlan 发表于 2008-07-08 19:25

将table_grpuser表按照你的查询建立索引,重复索引
页: [1]
查看完整版本: [求助]存储过程优化的问题,急求大虾们帮忙