免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2372 | 回复: 2
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-07 10:30 |只看该作者 |倒序浏览
小弟目前没有积分,对不住各位大大了,以后有积分一定补上.
foreach SELECT grpIndex,county,grpid  
                INTO  vgrpIndex,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一条数据,然后执行下一个数据呢?

论坛徽章:
0
2 [报告]
发表于 2008-07-07 21:39 |只看该作者
foreach x in group
   select * from grpuser ....
end foreach

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

论坛徽章:
0
3 [报告]
发表于 2008-07-08 19:25 |只看该作者
将table_grpuser表按照你的查询建立索引,重复索引
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP