Foxtable(狐表)用户栏目专家坐堂 → [求助]父表与子表同步加载 ,in 语法非常慢!--已解决


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

主题:[求助]父表与子表同步加载 ,in 语法非常慢!--已解决

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


加好友 发短信
等级:四尾狐 帖子:936 积分:7725 威望:0 精华:0 注册:2013/7/7 13:37:00
[求助]父表与子表同步加载 ,in 语法非常慢!--已解决  发帖心情 Post By:2013/11/18 12:05:00 [只看该作者]

由于要经常更新关联订单的相关所有表,所以 用in 语法代入很多订单号
OrderID IN ('ACT201309-001', 'ACT201309-002', 'ACT201309-003', 'ACT201309-004', 'ACT201309-005', 'ACT201309-006', 'ACT201309-007', 'ACT201309-008',  'ACT201309-009', 'ACT201309-010', 'ACT201309-011', 'ACT201309-012', 'ACT201309-013', 'ACT201309-014', 'ACT201309-015', 'ACT201309-016', 'ACT201309-017',    'ACT201309-018', 'ACT201309-019', 'ACT201309-020', 'ACT201309-021', 'ACT201309-023', 'ACT201309-024', 'ACT201309-025', 'ACT201310-001', 'ACT201310-002',  'ACT201310-003', 'ACT201310-004', 'ACT201310-005', 'ACT201310-006', 'ACT201310-007', 'ACT201310-008', 'ACT201310-009', 'ACT201310-010', 'ACT201310-011',  'ACT201310-012', 'ACT201310-013', 'ACT201310-014', 'ACT201310-015', 'ACT201310-016', 'ACT201310-017', 'ACT201310-018', 'ACT201310-019', 'ACT201310-020',   'ACT201310-021', 'ACT201310-022', 'ACT201310-023', 'ACT201310-024', 'ACT201310-025', 'ACT201310-026', 'ACT201310-027', 'ACT201310-028', 'ACT201310-029',  'ACT201310-030', 'ACT201310-031', 'ACT201310-032', 'ACT201310-033', 'ACT201310-034', 'ACT201310-035', 'ACT201310-036', 'ACT201310-037', 'ACT201310-038', 
  'ACT201310-039', 'ACT201310-040', 'ACT201310-041', 'ACT201310-042')

DataTables("子表").LoadFilter = "OrderID In (" & ids & ")"
……………


结果发现子表更新很慢,请问大家有什么好方法没有?
[此贴子已经被作者于2013-11-19 15:07:32编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/18 12:08:00 [只看该作者]

1.你加载这么多个表,速度肯定不会很理想
3.检查是否网络问题导致加载慢


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


加好友 发短信
等级:四尾狐 帖子:936 积分:7725 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2013/11/18 13:29:00 [只看该作者]

刚才测试下时间
BagRegList表  2145条记录,  载入用时8秒
OrderProductProcess表   196条记录,  载入用时17秒

怎么记录少反而用时这么长?

Dim st As Date = Date.Now

DataTables("BagRegList").LoadFilter = "OrderID In ('ACT201309-001', 'ACT201309-002', 'ACT201309-003', 'ACT201309-004', 'ACT201309-005', 'ACT201309-006', 'ACT201309-007', 'ACT201309-008', 'ACT201309-009', 'ACT201309-010', 'ACT201309-011', 'ACT201309-012', 'ACT201309-013', 'ACT201309-014', 'ACT201309-015', 'ACT201309-016', 'ACT201309-017', 'ACT201309-018', 'ACT201309-019', 'ACT201309-020', 'ACT201309-021', 'ACT201309-023', 'ACT201309-024', 'ACT201309-025', 'ACT201310-001', 'ACT201310-002', 'ACT201310-003', 'ACT201310-004', 'ACT201310-005', 'ACT201310-006', 'ACT201310-007', 'ACT201310-008', 'ACT201310-009', 'ACT201310-010', 'ACT201310-011', 'ACT201310-012', 'ACT201310-013', 'ACT201310-014', 'ACT201310-015', 'ACT201310-016', 'ACT201310-017', 'ACT201310-018', 'ACT201310-019', 'ACT201310-020', 'ACT201310-021', 'ACT201310-022', 'ACT201310-023', 'ACT201310-024', 'ACT201310-025', 'ACT201310-026', 'ACT201310-027', 'ACT201310-028', 'ACT201310-029', 'ACT201310-030', 'ACT201310-031', 'ACT201310-032', 'ACT201310-033', 'ACT201310-034', 'ACT201310-035', 'ACT201310-036', 'ACT201310-037', 'ACT201310-038', 'ACT201310-039', 'ACT201310-040', 'ACT201310-041', 'ACT201310-042')"
DataTables("BagRegList").Load()

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")


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


加好友 发短信
等级:狐神 帖子:6848 积分:43334 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2013/11/18 13:55:00 [只看该作者]

以下是引用jnletao在2013-11-18 12:05:00的发言:
由于要经常更新关联订单的相关所有表,所以 用in 语法代入很多订单号
OrderID IN ('ACT201309-001', 'ACT201309-002', 'ACT201309-003', 'ACT201309-004', 'ACT201309-005', 'ACT201309-006', 'ACT201309-007', 'ACT201309-008',  'ACT201309-009', 'ACT201309-010', 'ACT201309-011', 'ACT201309-012', 'ACT201309-013', 'ACT201309-014', 'ACT201309-015', 'ACT201309-016', 'ACT201309-017',    'ACT201309-018', 'ACT201309-019', 'ACT201309-020', 'ACT201309-021', 'ACT201309-023', 'ACT201309-024', 'ACT201309-025', 'ACT201310-001', 'ACT201310-002',  'ACT201310-003', 'ACT201310-004', 'ACT201310-005', 'ACT201310-006', 'ACT201310-007', 'ACT201310-008', 'ACT201310-009', 'ACT201310-010', 'ACT201310-011',  'ACT201310-012', 'ACT201310-013', 'ACT201310-014', 'ACT201310-015', 'ACT201310-016', 'ACT201310-017', 'ACT201310-018', 'ACT201310-019', 'ACT201310-020',   'ACT201310-021', 'ACT201310-022', 'ACT201310-023', 'ACT201310-024', 'ACT201310-025', 'ACT201310-026', 'ACT201310-027', 'ACT201310-028', 'ACT201310-029',  'ACT201310-030', 'ACT201310-031', 'ACT201310-032', 'ACT201310-033', 'ACT201310-034', 'ACT201310-035', 'ACT201310-036', 'ACT201310-037', 'ACT201310-038', 
  'ACT201310-039', 'ACT201310-040', 'ACT201310-041', 'ACT201310-042')

DataTables("子表").LoadFilter = "OrderID In (" & ids & ")"
……………


结果发现子表更新很慢,请问大家有什么好方法没有?
[此贴子已经被作者于2013-11-18 12:06:20编辑过]

不明白代码为什么这么长


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


加好友 发短信
等级:四尾狐 帖子:936 积分:7725 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2013/11/18 13:59:00 [只看该作者]

我代码里放的是变量,为了演示方便  才把变量内容写出来 的。

其实 我的的代码意图是  载入最近的60个订单及其相关的子表,它相关的子表有15个。

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/18 15:00:00 [只看该作者]

注译所有表事件 慢慢排查看看.

应急方案有

利用SQLCOMMAND查询出这个表.然后赋值给要加载的表

Tables("要加载的表名").DataSource =dt 

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


加好友 发短信
等级:五尾狐 帖子:1022 积分:12768 威望:0 精华:0 注册:2011/5/29 15:19:00
回复:(jnletao)[求助]父表与子表同步加载 ,in 语...  发帖心情 Post By:2013/11/18 17:57:00 [只看该作者]

的确很慢,主要是在加载子表的过程,
因为是读取in()里面的值的过程慢,如果同步加载的子表多,更加慢。
试过在100M的局域网,主表加载超过2000条数据,就超时出错了。如果取消子表的同步加载,就秒开。
出错提示,好像是XXX逸出了。。应该是in()里面的参数太多了。

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2013/11/18 18:17:00 [只看该作者]

最好用 inner join ,飞快。。。。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/11/18 20:38:00 [只看该作者]

 首先第一个,in是肯定会慢的。同时你要看看你是否触发了其余的代码导致更慢 http://www.foxtable.com/help/topics/2218.htm

 你可以试试用大于>小于来加载子表,这样会快一些。比如 DataTables("子表").LoadFilter = "OrderID > 'ACT201309-001'"

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


加好友 发短信
等级:四尾狐 帖子:936 积分:7725 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2013/11/19 9:33:00 [只看该作者]

字符串 也可以用 大于 小于吗?

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