Foxtable(狐表)用户栏目专家坐堂 → 怎么优化这段代码,执行效率很低


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

主题:怎么优化这段代码,执行效率很低

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


加好友 发短信
等级:童狐 帖子:203 积分:1728 威望:0 精华:0 注册:2018/8/23 14:16:00
怎么优化这段代码,执行效率很低  发帖心情 Post By:2021/3/9 16:28:00 [只看该作者]

SQLxsmxFilter ="[t_rm_saleflow].[item_no] Like '" & kh.Value & "%'and [t_bd_branch_info].[branch_name] Like '" & ck.Value & "%'and [item_name] Like '" & pl.Value & "%'and [item_subname] Like '" & pm.Value & "%'"
SQLpdcydFilter  ="{t_bd_item_info}.[item_no] Like '" & kh.Value & "%'and [t_bd_branch_info].[branch_name] Like '" & ck.Value & "%'and [item_name] Like '" & pl.Value & "%'and [item_subname] Like '" & pm.Value & "%'"
SQLtyFilter ="{t_im_sheet_barcode_qty}.[item_no] Like '" & kh.Value & "%'and [branch_name] Like '" & ck.Value & "%'and [item_name] Like '" & pl.Value & "%'and [item_subname] Like '" & pm.Value & "%'"
Filter="款号 Like '" & kh.Value & "%' and 品类 Like '*" & pl.Value & "'and 品名 like '*" & pm.Value & "'and 仓库 like '*" & ck.Value & "'"

If jj.Text.Length>0 Then
    Filter = Filter & "and 季节 in ('" & jj.text.replace(",", "','") & "')"
    SQLxsmxFilter = SQLxsmxFilter  & "and [item_clsname] in ('" & jj.text.replace(",", "','") & "')"
    SQLpdcydFilter = SQLpdcydFilter & "and [item_clsname] in ('" & jj.text.replace(",", "','") & "')"
    SQLtyFilter = SQLtyFilter & "and [item_clsname] in ('" & jj.text.replace(",", "','") & "')"
End If

DataTables("库存调整入明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'oo'and [db_no] = '+'"
DataTables("库存调整入明细").Load
DataTables("库存调整出明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'oo'and [db_no] = '-'"
DataTables("库存调整出明细").Load
DataTables("采购退货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'ro'"
DataTables("采购退货单明细").Load
DataTables("采购收货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'pi'"
DataTables("采购收货单明细").Load
DataTables("直调出库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'do'"
DataTables("直调出库单明细").Load
DataTables("直调入库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'do'"
DataTables("直调入库单明细").Load
DataTables("销售明细").LoadFilter = SQLxsmxFilter
DataTables("销售明细").Load
DataTables("盘点差异单明细").LoadFilter = SQLpdcydFilter
DataTables("盘点差异单明细").Load


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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/9 16:44:00 [只看该作者]

无法优化。表格得一个一个加载。

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


加好友 发短信
等级:童狐 帖子:203 积分:1728 威望:0 精华:0 注册:2018/8/23 14:16:00
  发帖心情 Post By:2021/3/9 17:05:00 [只看该作者]

那是可以使用其他的写法,完成这个逻辑吗

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


加好友 发短信
等级:童狐 帖子:203 积分:1728 威望:0 精华:0 注册:2018/8/23 14:16:00
  发帖心情 Post By:2021/3/9 17:12:00 [只看该作者]

我是加载完之后,然后使用GroupTableBuilder。是不是应该直接使用SQLGroupTableBuilder来执行。如果使用SQLGroupTableBuilder ,列名又不知道怎么处理

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/9 17:45:00 [只看该作者]

如果只是为了统计,直接统计就行了,没有必要加载什么查询表



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


加好友 发短信
等级:童狐 帖子:203 积分:1728 威望:0 精华:0 注册:2018/8/23 14:16:00
  发帖心情 Post By:2021/3/10 8:34:00 [只看该作者]

SQLxsmxFilter ="[t_rm_saleflow].[item_no] Like '" & kh.Value & "%'and [t_bd_branch_info].[branch_name] Like '" & ck.Value & "%'and [item_name] Like '" & pl.Value & "%'and [item_subname] Like '" & pm.Value & "%'"
SQLpdcydFilter  ="{t_bd_item_info}.[item_no] Like '" & kh.Value & "%'and [t_bd_branch_info].[branch_name] Like '" & ck.Value & "%'and [item_name] Like '" & pl.Value & "%'and [item_subname] Like '" & pm.Value & "%'"
SQLtyFilter ="{t_im_sheet_barcode_qty}.[item_no] Like '" & kh.Value & "%'and [branch_name] Like '" & ck.Value & "%'and [item_name] Like '" & pl.Value & "%'and [item_subname] Like '" & pm.Value & "%'"
Filter="款号 Like '" & kh.Value & "%' and 品类 Like '*" & pl.Value & "'and 品名 like '*" & pm.Value & "'and 仓库 like '*" & ck.Value & "'"

If jj.Text.Length>0 Then
    Filter = Filter & "and 季节 in ('" & jj.text.replace(",", "','") & "')"
    SQLxsmxFilter = SQLxsmxFilter  & "and [item_clsname] in ('" & jj.text.replace(",", "','") & "')"
    SQLpdcydFilter = SQLpdcydFilter & "and [item_clsname] in ('" & jj.text.replace(",", "','") & "')"
    SQLtyFilter = SQLtyFilter & "and [item_clsname] in ('" & jj.text.replace(",", "','") & "')"
End If

DataTables("库存调整入明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'oo'and [db_no] = '+'"
DataTables("库存调整入明细").Load
DataTables("库存调整出明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'oo'and [db_no] = '-'"
DataTables("库存调整出明细").Load
DataTables("采购退货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'ro'"
DataTables("采购退货单明细").Load
DataTables("采购收货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'pi'"
DataTables("采购收货单明细").Load
DataTables("直调出库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'do'"
DataTables("直调出库单明细").Load
DataTables("直调入库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = 'do'"
DataTables("直调入库单明细").Load
DataTables("销售明细").LoadFilter = SQLxsmxFilter
DataTables("销售明细").Load
DataTables("盘点差异单明细").LoadFilter = SQLpdcydFilter
DataTables("盘点差异单明细").Load

 

 

这个加载是主线程同步加载吗,为什么有时候一执行,程序就未响应了。然后等了10分钟也不会动。有时候又不会


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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/10 8:51:00 [只看该作者]

默认都是主线程同步加载,再说DataTable也不支持异步加载。

如果加载的条件导致数据多,肯定就慢;如果还有表事件,以及表达式列计算,会更慢;如果是远程数据库还会更慢。

这么复杂的sql都搞出来了,如果加载数据不是为了编辑,而是做统计,还不如直接使用sql统计返回结果

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


加好友 发短信
等级:童狐 帖子:203 积分:1728 威望:0 精华:0 注册:2018/8/23 14:16:00
  发帖心情 Post By:2021/3/10 10:27:00 [只看该作者]

我看了一下加载出来的所有数据,也就是不到3W条,但是我等了大概5分钟

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


加好友 发短信
等级:超级版主 帖子:105473 积分:536350 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/10 11:05:00 [只看该作者]

如果还有表事件,以及表达式列计算,会更慢;如果是远程数据库还会更慢。

 回到顶部