Foxtable(狐表)用户栏目专家坐堂 → 两个表更新数据


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

主题:两个表更新数据

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
两个表更新数据  发帖心情 Post By:2019/9/19 11:09:00 [只看该作者]

老师,两个后台表
1.商品资料表
表名:条码货号,字段:
ean    sku

2.盘点明细表,字段:
条码   货号(无值)


盘点明细表的条码 , 就是 条码货号   的ean  ,货号就相当于是条码货号表的 SKU

现在想把盘点明细表的货号(现在是NULL值),更新为 对应 条码货号表  的 sku     



我这样写,感觉太慢了:




Dim st As Date = Date.Now
'要测试耗时的代码

Dim cmd As new SQLCommand
cmd.C


Dim dt1 As DataTable  '资料表
Dim dt2 As DataTable '盘点表

Dim dr1 As DataRow
Dim dr2 As DataRow

cmd.CommandText = "selec t * from 条码货号  "
dt1 = cmd.ExecuteReader()

cmd.CommandText = "selec t * from 盘点明细表 where 盘点日期 = '" & Date.Today & "' "
dt2 = cmd.ExecuteReader()

For Each dr2  In  dt2.DataRows
    dr1 = dt1.sqlfind("ean = '" & dr2("条码") & "'")
    If dr1 IsNot Nothing Then
        cmd.CommandText = " updat e 盘点明细表 set 货号 = '" & dr1("sku") & "' where 条码 = '" & dr1("ean") & "' and 货号 is  null "
        cmd.ExecuteNonQuery()
    End If
Next


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

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


加好友 发短信
等级:超级版主 帖子:106097 积分:539590 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/19 11:26:00 [只看该作者]

一条sql就够了

update 盘点明细表 set 货号 = a.sku from 商品资料表 as a where a.ean = 盘点明细表.条码 and 货号 is  null

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/19 11:37:00 [只看该作者]

老师,你太厉害了。
7万条数据,1.2秒搞定

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/29 17:41:00 [只看该作者]

cmd.commandtext = "updat e 资金日报账户表 set 本日增加 = a.本日增加 , 本日减少 = a.本日减少 from 科目表明细 As a where a.项目编号 = 资金日报账户表.项目编号 and  a.日期 = 资金日报账户表.日期 and a.分销商 = 资金日报账户表.分销商 and a.分销商 = '" & gongsi & "' and a.日期 >= '" & ddate & "' "  '  
cmd.ExecuteNonQuery

老师,这个数据库表 总行数有 25.5万条,符合这个更新条件的有1.1万。

更新速度非常慢,要十几分钟,不知道为什么。。。
老师有什么办法可以优化吗

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


加好友 发短信
等级:超级版主 帖子:106097 积分:539590 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/29 20:08:00 [只看该作者]

项目编号、分销商、日期分别作为索引添加

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/29 21:36:00 [只看该作者]

老师,
[此贴子已经被作者于2019/9/29 21:49:37编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/29 21:43:00 [只看该作者]

老师,看了数据库,有这些:

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20190929214639.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2019/9/29 21:46:44编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/29 22:03:00 [只看该作者]

哇靠,我把索引全删掉,速度就变成秒级的了。马上就好了,难道索引会对更新数据变慢

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


加好友 发短信
等级:超级版主 帖子:106097 积分:539590 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/29 22:30:00 [只看该作者]

一般经常用作查询条件,或者进行关联的列才需要作为索引,索引不是越多越好,用不好,反而有反作用。

直接把sql放到数据库执行慢不慢?这个表有没有触发器?这么简单地sql不应该10几分钟的,几亿数据都不需要这么长时间。

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16181 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2019/9/29 23:32:00 [只看该作者]

好的,蓝老师,我去掉了所有的索引就好了。

 回到顶部