Foxtable(狐表)用户栏目专家坐堂 → 执行效率测试


  共有6527人关注过本帖树形打印复制链接

主题:执行效率测试

帅哥哟,离线,有人找我吗?
lsy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
执行效率测试  发帖心情 Post By:2014/4/10 15:18:00 [显示全部帖子]

五万行的数据。

 

先清空计算结果列(初始是清空的)

 

两种不同的代码:

RaiseDataColChanged,差不多就是死机,时间太长,等不起。

用SQLCommand,十几分钟或二十几分钟。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:执行效率测试.rar


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 15:57:00 [显示全部帖子]

直接这样,比较快:

Dim now As Date = Date.Now
Dim tp As TimeSpan
Dim cmd As New SQLCommand
cmd.CommandText = "Select 单据号,Sum(成本金额) As 零售金额 From {药品收发记录} Group By 单据号"
Dim dt As DataTable = cmd.ExecuteReader


Dim f As New Filler
f.SourceTable = dt '指定数据来源
f.SourceCols = "零售金额" '指定数据来源列
f.DataTable = DataTables("药品收发记录") '指定数据接收表
f.DataCols = "零售金额" '指定数据接收列
f.Fill() '填充数据
DataTables("药品收发记录").Load
tp = Date.Now - now
MessageBox.Show(tp.TotalSeconds)


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 16:36:00 [显示全部帖子]

快慢都保留着,看情况选用。

狐爸的方法不错。


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 17:07:00 [显示全部帖子]

以下是引用jspta在2014-4-10 16:45:00的发言:

update a set a.零售金额 = b.零售金额 from {药品收发记录} a inner join (Select 单据号,Sum(成本金额) As 零售金额 From {药品收发记录} Group By 单据号) b on a.单据号 = b.单据号
这句话居然不能执行,提示操作符丢失?

这个耗时主要在保存与LOAD上,代码没太大问题。

照成这个操作结果主要是表结构设计不合理,这张表时严重不符合数据库要求。设计合理点,用查询表直接就解决了

就是测试代码效率,赋值到数据表,不是查询表。


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 17:24:00 [显示全部帖子]

以下是引用狐狸爸爸在2014-4-10 17:08:00的发言:
lsy兄,这个也是赋值到数据表的,而且直接保存了。

我是指他说的,赋值到查询表的问题,不是说Update。


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 17:25:00 [显示全部帖子]

各种代码,有的方便,有的效率高,必须做到心中有数,不然就是一本糊涂账。

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 17:49:00 [显示全部帖子]

以下是引用jspta在2014-4-10 17:40:00的发言:

就是啊,看Update代码,没问题呀。


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 17:53:00 [显示全部帖子]

DataColChanged

If Forms("执行效率测试").Opened Then
    If e.DataCol.Name = "零售价" AndAlso e.DataRow.IsNull(e.DataCol) = False Then
        Dim dr As DataRow = Forms("执行效率测试").Controls("Table1").Table.DataTable.Find("单据号 = '" & e.DataRow("单据号") & "'")
        If dr IsNot Nothing Then
            e.DataRow("零售金额") = dr("零售金额")
        End If
    End If
End If

 

窗口按钮:

Dim now As Date = Date.Now
Dim tp As TimeSpan
Dim cmd As New SQLCommand
cmd.CommandText = "Select 单据号,Sum(成本金额) As 零售金额 From {药品收发记录} Group By 单据号"
Dim dt As DataTable = cmd.ExecuteReader
Dim t As Table = e.Form.Controls("Table1").Table
t.DataSource = dt
DataTables("药品收发记录").DataCols("零售价").RaiseDataColChanged
DataTables("药品收发记录").Load
tp = Date.Now - now
MessageBox.Show(tp.TotalSeconds)

[此贴子已经被作者于2014-4-10 17:59:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 18:06:00 [显示全部帖子]

请问狐爸,Update为什么执行错误?直接用SQL,效率应该最高了。

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/4/10 21:07:00 [显示全部帖子]

绕来绕去,还是SQLCommand综合性价比最高。

 回到顶部
总数 14 1 2 下一页