怎么这么慢啊!!!!100分

heijiangff 2003-01-11 02:39:00
我用的是pb8+oracle8.1.7
数据库里有四张表
1,交接箱信息表
  结构:交接箱编号, 容量(对)...(其他的一些属性)主键是编号(5000条记录)
     j00101 400 ......
     j00102 800 ....
..............................
j00801 400 ......
2,交接箱线序表
  结构:交接箱编号, 线序,状态,  电话号码....(90万条记录,已建索引)
     j00101 1 0(空闲)  null
j00101 2 1(使用)  5926711
     j00101 3 1(使用)  5926712
j00101 4 1(使用)  5926713
j00101 5 1(使用)  5926714
    .............................
j00101 400 2(坏线)  
 如果是400对的j00101交接箱就有400条记录

3,计费表,
   结构:电话号码:年,月,月租,市话.........
5926711 2002 11 15 23.45
5926712 2002 11 15 32.98
.........................................
5926714 2002 11 15 98.34
一共有90万条记录
4,统计表
  结构:交接箱编号,年,月,线序使用情况,总月租,总市话....


要求统计结果放在“统计表”里
我的做法:
由于不知道怎样直接在数据库里按rowid 依次读出交接箱编号:我通过数据窗口进行retrieve()后再按getrow()读交接箱编号(浪费了时间,不知怎样改进,最好直接从数据库里按顺序读)
for i=1 to dw_1.rowcount()
bh=dw_1.getitemstring(i,"jjxbh")
然后我再设一个游标从线序表里找到该交接箱的线序和对应的电话号码;
 通过游标计算线序使用情况,同时根据号码在计费表进行累计求和
最后插入统计表.

这样速度太慢,计算一条需3-4秒(如果有10万个交接箱,计算完需5天,开玩笑!!),怎样优化呢?请大家讨论,人人有分!!!!


...全文
87 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
888888888888 2003-05-10
  • 打赏
  • 举报
回复
关注
xumail 2003-01-18
  • 打赏
  • 举报
回复
up
erigido 2003-01-18
  • 打赏
  • 举报
回复
up
flyhot 2003-01-11
  • 打赏
  • 举报
回复
试用存储过程实施看!
bomber2001 2003-01-11
  • 打赏
  • 举报
回复
用rowscopy可能会好点,可以用compute字段来代替不尽相同的字段
ropriest 2003-01-11
  • 打赏
  • 举报
回复
根据统计表的字段,从表1、2、3中取出相应的字段,作一个跟统计表字段一样的DataStore,然后在程序中,从DataStore中循环取出数据,RowsCopy到统计表中,这样应该要快得多
alwaystar 2003-01-11
  • 打赏
  • 举报
回复
计费表统计可以这样写
select 电话号码 , sum(市话费用) from 计费表
where 年=? 月=?
group by 电话号码
alwaystar 2003-01-11
  • 打赏
  • 举报
回复
不知道你的线序表与计费表是用什么连接的,是电话号吗?

这样的循环的确会很慢,因为毕竟是在前台写的代码,
在后台做个用于统计的视图,然后和交接箱表做查询用数据窗显示
同时:ROWID是可以使用的,在ORACLE中可以直接写
select column_name from table_name where rowid = 1;
就相当于MSSQL中的
select top 1 column_name from table_name;

401

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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