注册 登录
编程论坛 VFP论坛

用程序,实现在学生表中到成绩表获取最高成绩,如何优化速度

qdtatalei 发布于 2023-07-20 14:17, 761 次点击
用程序,在学生科目表中,把科目的最高成绩找出来,如下程序,实际运行时,如数据量较大,程序运行缓慢,甚至要达到1小时以上,请教大神,如何优化?
select 1
Shu = RECCOUNT()
for i = 1 to Shu   
   go i
   XH = alltrim(学号)
   KCID = alltrim(课程ID)
   RDCJ = -10


   select 2
   locate for alltrim(学号) == XH and alltrim(课程ID) == KCID
   
      do while found()
           if isblank(成绩成绩)
              RDCJ = Max(RDCJ,-1)
          else
              RDCJ = Max(RDCJ,成绩)         
          endif
         continue
      enddo
  
   select 1

   repl 认定成绩 with alltrim(STR(RDCJ))

endfor
5 回复
#2
laowan0012023-07-20 15:21
VFP9
select 学号,课程ID,max(成绩) RDCJ from 表2 group by 学号,课程ID into cursor 单科最高
update a set a.认定成绩=transform(b.RDCJ)) FROM 表1 a,单科最高 b where a.学号=b.学号 and a.课程ID=b.课程ID
use in 单科最高


实际运行时,如数据量较大,程序运行缓慢,甚至要达到1小时以上
想问一下,多大数据量时会这样?

[此贴子已经被作者于2023-7-20 15:35编辑过]

#3
sdta2023-07-20 15:42
上传相关数据看看
#4
yiyanxiyin2023-07-20 18:29
如果是海量数据,先整理数据, 去除学号、课程ID的前后空白, 不要因数据不规范增加查询时间, 然后学号,课程ID建索引
#5
z126892023-07-21 08:26
程序运行1小时以上?共计多少条记录?
locate远不如用索引查找快,数据量大的时候效率提升的不是一点半点
试试2楼的SQL,我在145116条记录运行的时间是0.13秒
只有本站会员才能查看附件,请 登录




[此贴子已经被作者于2023-7-21 08:32编辑过]

#6
dbf永动机2023-08-18 08:35
学生表能有多少行,百万行数据查询也没这么慢啊,而且这个查询用一句连表查就可以实现
1