[求助]存储过程中foreach语句优化问题,求大牛们帮忙

yanpingsha 2008-07-04 11:35:27
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表在30万左右,请问第一个foreach循环中有好的优化方式么?
第二个循环里面的sum是不是也是影响效率的原因?

另外foreach执行的机理是什么?是先执行select取出一个表的所有数据再执行下一个操作,还是select一条数据,然后执行下一个数据呢?
...全文
335 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujian1986 2009-07-24
  • 打赏
  • 举报
回复

select table_group.county,table_group.grpid,count(*),
sum(case when table_grpuser.type='1' then 1 else 0 end)
from table_group,table_grpuser
where table_group.grpIndex=table_grpuser.grpIndex
--我不大明白你想做什么,这是第一个foreach,你试试,下面你再处理
--你最好先看看sql基础查询中的联表查询
vampirewp 2009-06-16
  • 打赏
  • 举报
回复
检查表table_grpuser 是否创建了grpIndex列的索引

执行第二个Foreach这前,如果table_temp表记录很多,对该表创建location,county的组合索引
linyafeng 2008-10-24
  • 打赏
  • 举报
回复
怎么不使用游标啊!
cloudflashes 2008-08-03
  • 打赏
  • 举报
回复
楼上说的用临时表是个办法。
rabbitjump 2008-07-11
  • 打赏
  • 举报
回复
SELECT grpIndex, count(1) as fl_Num
from table_grpuser
group by grpIndex, type
into temp tmp_grpuser;

SELECT A.grpIndex, B.fl_Num
FROM table_group A, tmp_grpuser B
WHERE A.grpIndex = B.grpIndex
into temp tmp_Filter;

后面再进行关联统计,可以不用到foreach模式,提高处理效率




linyafeng 2008-07-08
  • 打赏
  • 举报
回复
不知道你的foreach的作用是不是取多条数据
如果是的话,你可以使用游标的。
linyafeng 2008-07-08
  • 打赏
  • 举报
回复
SELECT count(*)的执行效率比SELECT count (1)的执行效率要慢很多。
所以优化,要从很多方面考虑的!
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。

1,195

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 Informix
社区管理员
  • Informix社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧