以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 两个表更新数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=141006) |
-- 作者:fubblyc -- 发布时间: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 & "秒") |
-- 作者:有点蓝 -- 发布时间:2019/9/19 11:26:00 -- 一条sql就够了 update 盘点明细表 set 货号 = a.sku from 商品资料表 as a where a.ean = 盘点明细表.条码 and 货号 is null
|
-- 作者:fubblyc -- 发布时间:2019/9/19 11:37:00 -- 老师,你太厉害了。 7万条数据,1.2秒搞定
|
-- 作者:fubblyc -- 发布时间: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万。 更新速度非常慢,要十几分钟,不知道为什么。。。 老师有什么办法可以优化吗
|
-- 作者:有点蓝 -- 发布时间:2019/9/29 20:08:00 -- 项目编号、分销商、日期分别作为索引添加 |
-- 作者:fubblyc -- 发布时间:2019/9/29 21:36:00 -- 老师, [此贴子已经被作者于2019/9/29 21:49:37编辑过]
|
-- 作者:fubblyc -- 发布时间:2019/9/29 21:43:00 -- 老师,看了数据库,有这些: [此贴子已经被作者于2019/9/29 21:46:44编辑过]
|
-- 作者:fubblyc -- 发布时间:2019/9/29 22:03:00 -- 哇靠,我把索引全删掉,速度就变成秒级的了。马上就好了,难道索引会对更新数据变慢 |
-- 作者:有点蓝 -- 发布时间:2019/9/29 22:30:00 -- 一般经常用作查询条件,或者进行关联的列才需要作为索引,索引不是越多越好,用不好,反而有反作用。 直接把sql放到数据库执行慢不慢?这个表有没有触发器?这么简单地sql不应该10几分钟的,几亿数据都不需要这么长时间。
|
-- 作者:fubblyc -- 发布时间:2019/9/29 23:32:00 -- 好的,蓝老师,我去掉了所有的索引就好了。 |