以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [讨论]关于2014关于后台数据的处理的效率问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=46702)

--  作者:don
--  发布时间:2014/2/27 11:46:00
--  [讨论]关于2014关于后台数据的处理的效率问题
我有一段代码,用在窗口AfterLoad中,涉及三表,共12处用了Find,Select,GetComboListString,
今天把这些Find,Select,GetComboListString直接改为:SQLFind,SQLSelect,SQLGetComboListString,

结果:

没改动前 ----> 1秒
改动后 ------> 18秒

后用临时表加载三表, 再用Find,Select,GetComboListString, 效率 为 1秒!

看来不能简单化用这个后台数据的处理
是否每次SQLFIND什么的都先加载数据到临时表,再寻找?

--  作者:唐尸三摆手
--  发布时间:2014/2/27 11:48:00
--  
情况就是这么个情况,访问后台是需要时间的!
--  作者:lsy
--  发布时间:2014/2/27 11:49:00
--  
有类似的感觉。
--  作者:y2287958
--  发布时间:2014/2/27 11:54:00
--  
同感
--  作者:supwork
--  发布时间:2014/2/27 11:55:00
--  
用临时表加载三表 你用时多少
--  作者:程兴刚
--  发布时间:2014/2/27 11:59:00
--  

Find,Select,GetComboListString      \'从datatable已经加载的数据记录中找符合条件的数据;

SQLFind,SQLSelect,SQLGetComboListString  \'从数据库后台找符合条件的数据;

 

二者有本质的区别,有时间差是必然。


--  作者:don
--  发布时间:2014/2/27 12:00:00
--  
以下是引用supwork在2014-2-27 11:55:00的发言:
用临时表加载三表 你用时多少
没测试,我这样用:Dim dht1,Dcc2,dly3 As DataTable
cmd1.CommandText = "SELECT * From {合約管理}"
Dht1 = cmd1.ExecuteReader()
cmd1.CommandText = "SELECT * From {倉庫}"
Dcc2 = cmd1.ExecuteReader()
cmd1.CommandText = "SELECT * From {倉類型}"
Dly3 = cmd1.ExecuteReader()


--  作者:狐狸爸爸
--  发布时间:2014/2/27 12:05:00
--  

这个差别,就是从互联网下载一个10M的文件和本机复制一个10M文件的差别,是正常的。

 

全部加载还是后台处理,必须综合考虑。

 

但是数据量不大,且反复调用的数据,肯定应该一次性加载进来的,特别是网速不快的时候,否则后果就是反复从互联网下载这个10M的文件一样。

 

 

[此贴子已经被作者于2014-2-27 12:05:33编辑过]

--  作者:blackzhu
--  发布时间:2014/2/27 13:01:00
--  
但是加载数据进来也是需要时间的,另外一个用SQL可以获取最新的数据.
--  作者:jspta
--  发布时间:2014/2/27 13:08:00
--  
今天把这些Find,Select,GetComboListString直接改为:SQLFind,SQLSelect,SQLGetComboListString,

我觉得最大可能的原因在循环体内大量的使用SQLFIND,SQLSelect,
相当于执行了n次SQL语句,速度怎么会比得上直接加载在内存中的速度?
个人觉得这些方法以校验数据为主,直接在内存中操作,不适合反复使用

[此贴子已经被作者于2014-2-27 13:12:28编辑过]