Foxtable(狐表)用户栏目专家坐堂 → SQLCompute效率


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

主题:SQLCompute效率

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106688 积分:542629 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/25 21:44:00 [显示全部帖子]

直接比较没有意义,看使用场景。具体问题具体分析。

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106688 积分:542629 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/25 22:22:00 [显示全部帖子]

这种情况,表的数据越多,sqlCompute的效率就越高,反之加载后再Compute的效率就高。给后台表加上必要的索引。

可以自己测试是哪段代码费时:
Dim dr As DataRow = Tables("工程款管理").current.DataRow
If dr("审批状态") = "已审批完成" Then
    MessageBox.Show("已审批完成的项目不能再进行计算!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    e.Cancel = True
    Return
End If
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
Dim filter As String = "合同编码='" & dr("合同编码") & "'and 计量期数='" & dr("计量期数") & "'"
Output.Show(dr("新老项目"))
If dr("新老项目") = "新项目" Then '为空
    Dim Filter1 As String= "合同编码='" & dr("合同编码") & "'"
    With e.Form.Controls("开piao日期")
        If .Value IsNot Nothing Then
            Dim d As Date = .value
            Dim d2 As Date = new Date(d.year, d.Month, 15)
            d2 = d2.AddMonths(1)
            Filter1 &= " and 寄达日期 <= '" & d2 & "'"
        End If
    End With
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
    Dim sum1 As Double = DataTables("进项piao审核").sqlCompute("sum(税额)", filter1 & " and 审核状态='已审核' and 类别='专piao'")
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
    Dim sum2 As Double = 0
    For i As Integer = 1 To dr("计量期数")-1
        sum2 += val(dr.DataTable.datarows(i-1)("本期统计增值税"))
    Next
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
    'dr("本期统计增值税")= sum1-sum2
    dr("本期统计增值税") = DataTables("进项piao审核").sqlCompute("sum(税额)", filter & " And 审核状态='已审核' and 类别='专piao'")
    dr("本期统计成本fa piao") = DataTables("进项piao审核").sqlCompute("sum(税后金额)", filter & " And 审核状态='已审核' and 工料机类别 in ('材料','机械','管理')") + DataTables("进项piao审核").sqlCompute("sum(税额)", filter & " And 审核状态='已审核' and 类别='普piao' and 工料机类别 in ('材料','机械','管理')")
    dr("本期统计人工工资") = DataTables("进项piao审核").sqlCompute("sum(税后金额)", filter & " And 审核状态='已审核'  and 工料机类别='人工'") + DataTables("进项piao审核").sqlCompute("sum(税额)", filter & " And 审核状态='已审核' and 类别='普piao' and 工料机类别='人工'")
Else
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
    dr("本期统计增值税") = DataTables("进项piao审核").sqlCompute("sum(税额)", filter & " And 审核状态='已审核' and 类别='专piao'")  '不分时段计算
    dr("本期统计成本fa piao") = DataTables("进项piao审核").sqlCompute("sum(税后金额)", filter & " And 审核状态='已审核' and 工料机类别 in ('材料','机械','管理')") + DataTables("进项piao审核").sqlCompute("sum(税额)", filter & " And 审核状态='已审核' and 类别='普piao' and 工料机类别 in ('材料','机械','管理')")
    dr("本期统计人工工资") = DataTables("进项piao审核").sqlCompute("sum(税后金额)", filter & " And 审核状态='已审核' and 工料机类别='人工'")
End If
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
'成本fa piao及人工工资
If dr("应缴增值税基数") =Nothing Then '为空
    dr("成本基数") = Nothing
ElseIf dr("应缴增值税基数") ="合同金额" Then
    dr("成本基数") = dr("合同金额")
Else If dr("应缴增值税基数") ="fa piao金额" Then
    dr("成本基数") = dr("fa piao金额")
Else If dr("应缴增值税基数") ="计量金额" Then
    dr("成本基数") = dr("计量金额")
Else If dr("应缴增值税基数") ="申请金额" Then
    dr("成本基数") = dr("申请金额")
End If
Output.Show(Format(Date.Now,"HH:mm:ss.ffff"))
……

 回到顶部