Foxtable(狐表)用户栏目专家坐堂 → [求助]外部数据存储效率问题


  共有2801人关注过本帖平板打印复制链接

主题:[求助]外部数据存储效率问题

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


加好友 发短信
等级:九尾狐 帖子:2191 积分:18013 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]外部数据存储效率问题  发帖心情 Post By:2021/1/8 13:37:00 [只看该作者]

1、使用ACCESS做外部数据库
2、有些表使用了表达式列,包括但不限于逻辑列、字符串列
3、使用了论坛上的保存函数

    If strlist.Count > 0 Then   ‘strlist指的是对数据做增删改的脚本
        Dim cmd As new SQLCommand()
        cmd.ConnectionName = “外部数据连接名“
        Try
            cmd.BeginTransaction() '开启事务
            
            For Each s As String In strlist
                cmd.CommandText = s
                cmd.ExecuteNonQuery()
            Next
            cmd.Commit() '提交事务
        Catch ex As Exception '如果出错
            cmd.Rollback() '则回滚事务
            'MessageBox.Show(ex.Message, "错误",MessageBoxButtons.OK,MessageBoxIcon.Error)
        End Try
        
        tables("XX").DataTable.BaseTable.AcceptChanges()   '提交修改
    End If

现在的问题是:
(1)因为使用了一些表达式列(有些设了公式,有些没有),在项目运行过程中,难免会对表达式赋值,而一旦对表达式赋值,就会被判定为当前行修改过,导致SQL脚本的update部分会将这些列误认为数据列有改变而去后台执行
(2)实测17000行数据的时候,事务提交用时在40秒左右(即使只是表达式列有赋值而数据列没有变化,也会如此)。

解决路径可能有
(1)判断当前行是否有改变,是否能做到只判断数据列,表达式列无视?如果可以,SQL脚本行就可以少很多
(2)即使1可行,还得从事务提交的处理效率上想办法。如果17000行作为一个事务提交,排队执行,效率显然不高;如果有更多的数据,甚至是十万、百万级别,SQL脚本逐行处理,那效率可能更低了。有什么好的办法吗?

 回到顶部