问问各位大牛,提取数据库记录为什么速度如此慢?焦急等待中...

pipi20091001 2014-08-11 10:35:53
我的程序是c/s方式的,s是一个固定IP地址的服务器,我程序是用vb6开发的,一个个客户端安装了,窗体上放置了一个msflexgrid控件,程序访问数据库是通过存储过程实现的。现在遇到一个问题,我写了一个程序过程,用来获取这张表的记录的。sp名字p_assocmember_GetList
存储过程内容:
select * from doTable order by id
窗体上放了一个msflexgrid控件,在form_load()里加了如下代码:
Public Sub Data_Load()
Dim i As Integer
MSFlexGrid_Format
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
dbConnect
cmd.ActiveConnection = cnDatabase
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "p_assocmember_GetList"
Set rst = cmd.Execute
If rst.BOF = False Then
i = 1
Do Until rst.EOF
Me.msfgVisitor.TextMatrix(i, 1) = rst!sn
Me.msfgVisitor.TextMatrix(i, 2) = IIf(IsNull(rst!VisitDate), "", rst!VisitDate)
Me.msfgVisitor.TextMatrix(i, 3) = IIf(IsNull(rst!VisitTime), "", rst!VisitTime)
Me.msfgVisitor.TextMatrix(i, 4) = IIf(IsNull(rst!IsAppoint), "", IIf(rst!IsAppoint = 1, "是", "否"))
Me.msfgVisitor.TextMatrix(i, 5) = IIf(IsNull(rst!Name), "", rst!Name)
Me.msfgVisitor.TextMatrix(i, 6) = IIf(IsNull(rst!Sex), "", rst!Sex)
Me.msfgVisitor.TextMatrix(i, 7) = IIf(IsNull(rst!HomePhone), "", rst!HomePhone)
Me.msfgVisitor.TextMatrix(i, 8) = IIf(IsNull(rst!Mobile), "", rst!Mobile)
Me.msfgVisitor.TextMatrix(i, 9) = IIf(IsNull(rst!age), "", rst!age)
Me.msfgVisitor.TextMatrix(i, 10) = IIf(IsNull(rst!CustomerSource), "", rst!CustomerSource)
Me.msfgVisitor.TextMatrix(i, 11) = IIf(IsNull(rst!IsphTest), "", IIf(rst!IsphTest = 1, "是", "否"))
Me.msfgVisitor.TextMatrix(i, 12) = IIf(IsNull(rst!CoachName), "", rst!CoachName)
Me.msfgVisitor.TextMatrix(i, 13) = IIf(IsNull(rst!MemberCon), "", rst!MemberCon)
Me.msfgVisitor.TextMatrix(i, 14) = Format(IIf(IsNull(rst!FrontMoney), "0", rst!FrontMoney), "###.00")
Me.msfgVisitor.TextMatrix(i, 15) = IIf(IsNull(rst!regman), "", rst!regman)
i = i + 1
rst.MoveNext
Loop
End If
cnDatabase.Close
Set rst = Nothing
Set cmd = Nothing
End Sub
需要解决的问题:现在存了90条记录,读取时间大概是:36秒,我的笔记本是用无线网络方式的。请问大牛,如何优化一下,这样速度太慢了。以后记录还要多,要等半天了。
...全文
325 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
清茶708 2014-09-13
  • 打赏
  • 举报
回复
至于网格的第一行标题,重新写一次就行了
清茶708 2014-09-13
  • 打赏
  • 举报
回复
看你的代码,感觉慢在两个地方,第一个是你第二行代码的网格的格式化,第二个是慢在了将数据库中的记录往网格中写入的过程,比如你有90条记录,每个记录10个字段,你的指针就要向下移动90次,每次再逐个的写入10个单元格,相当于循环了900次,建议,查询出记录后,直接msflexgrid=rs(记录)应该更快一些
Tiger_Zhao 2014-08-12
  • 打赏
  • 举报
回复
除了切分,就只有靠改善硬件了。
  • 打赏
  • 举报
回复
加我QQ2776478814,问问各位大牛,提取数据库记录为什么速度如此慢?焦急等待中
pipi20091001 2014-08-11
  • 打赏
  • 举报
回复
我优化了一下,查询语句,改用要什么字段,就select什么字段,这样已经提升了很多了。
pipi20091001 2014-08-11
  • 打赏
  • 举报
回复
我有线试过了,也一样,30多秒,应该跟网络关系不大,还是程序的问题,请帮我想想办法,如何优化一下,现在才92条记录,以后900多条,那岂不是等很久,谢谢了!
Tiger_Zhao 2014-08-11
  • 打赏
  • 举报
回复
你先用有线连接测试,速度怎么样。
无线实在不适合直连远程数据库,实际速度差理论速度一大截。
pipi20091001 2014-08-11
  • 打赏
  • 举报
回复
除了表的切分,有没有其他技术上的办法?
of123 2014-08-11
  • 打赏
  • 举报
回复
楼上说的对。 如果有很大的字段,宁可将数据存在外部的文件中,相应字段只保存文件的路径。 否则,记录变得太大,每一次记录指针迁移都要触发“游标”(虚拟缓存中的数据库)与磁盘中的数据库文件的大量“磁盘交换”。
Tiger_Zhao 2014-08-11
  • 打赏
  • 举报
回复
说明你的表设计中,单个记录的数据太大了。
把表纵向分割,小字段一个表、大字段一个表,用 id 一一对应。
这样可以提高查询小字段的速度。

其实大数据可以用外部文件存放,比存放在数据库中性能要好。
赵4老师 2014-08-11
  • 打赏
  • 举报
回复
order by 谁 就在‘谁’上建索引

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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