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


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

主题:SQLCompute效率

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


加好友 发短信
等级:狐精 帖子:3223 积分:21401 威望:0 精华:0 注册:2016/3/28 16:57:00
SQLCompute效率  发帖心情 Post By:2019/1/25 20:39:00 [只看该作者]

有谁测试过直接用 SQLCompute 和用SQLCommand 生成临时表后用Compute那个效率高啊?

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


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

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

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


加好友 发短信
等级:狐精 帖子:3223 积分:21401 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2019/1/25 21:59:00 [只看该作者]

  比如这段代码,感觉很费时,到没测试过时间到底费时到那一部分代码,这种有没优化方法呢?

Dim dr As DataRow = Tables("工程款管理").current.DataRow
If dr("审批状态") = "已审批完成" Then
    MessageBox.Show("已审批完成的项目不能再进行计算!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    e.Cancel = True
    Return
End If

Dim filter As String = "合同编码='" & dr("合同编码") & "'and 计量期数='" & 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
    Dim sum1 As Double = DataTables("进项piao审核").sqlCompute("sum(税额)", filter1 & " and 审核状态='已审核' and 类别='专piao'")
    Dim sum2 As Double = 0
    For i As Integer = 1 To dr("计量期数")-1
        sum2 += val(dr.DataTable.datarows(i-1)("本期统计增值税"))
    Next
    '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
    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

'成本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

'退成本
If dr("是否是退扣款") = True Then '为空
    If dr("本期统计成本fa piao") > dr("本期需要成本fa piao") Then
        dr("本期需要成本fa piao") = dr ("")
    Else
        dr("本期需要成本fa piao") = dr ("本期统计成本fa piao")
    End If
Else
    If dr("应缴增值税基数") = Nothing Then '为空
        dr("本期需要成本fa piao") = Nothing
        dr("本期需要人工工资") = Nothing
    ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="合同金额" Then
        dr("本期需要成本fa piao") = dr("合同金额") / 1.1 * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("合同金额") / 1.1 * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="fa piao金额" Then
        dr("本期需要成本fa piao") = dr("fa piao金额") / 1.1 * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("fa piao金额") / 1.1 * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="计量金额" Then
        dr("本期需要成本fa piao") = dr("计量金额") / 1.1 * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("计量金额") / 1.1 * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = True AndAlso dr("应缴增值税基数") ="申请金额" Then
        dr("本期需要成本fa piao") = dr("申请金额") / 1.1 * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("申请金额") / 1.1 * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="合同金额" Then
        dr("本期需要成本fa piao") = dr("合同金额") * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("合同金额") * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="fa piao金额" Then
        dr("本期需要成本fa piao") = dr("fa piao金额") * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("fa piao金额") * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="计量金额" Then
        dr("本期需要成本fa piao") = dr("计量金额") * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("计量金额") * (dr("人工比例") / 100)
    ElseIf dr("是否扣税") = False AndAlso dr("应缴增值税基数") ="申请金额" Then
        dr("本期需要成本fa piao") = dr("申请金额") * (dr("材机比例") / 100)
        dr("本期需要人工工资") = dr("申请金额") * (dr("人工比例") / 100)
    End If
End If
'本期需要增值税计算
If dr.IsNull("应缴增值税基数") OrElse dr.IsNull("增值税征收方式")  Then '为空
    dr("本期需要增值税") = Nothing
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" Then
    dr("本期需要增值税") = dr("合同金额") / 1.1 * 0.07
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("本期需要增值税") = dr("合同金额") / 1.03 * 0.03
ElseIf dr("应缴增值税基数") ="fa piao金额"  AndAlso dr("增值税征收方式") = "标准征收" Then
    dr("本期需要增值税") = dr("fa piao金额") / 1.1 * 0.07
ElseIf dr("应缴增值税基数") ="fa piao金额"  AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("本期需要增值税") = dr("fa piao金额") / 1.03 * 0.03
ElseIf dr("应缴增值税基数") ="申请金额"  AndAlso dr("增值税征收方式") = "标准征收" Then
    dr("本期需要增值税") = dr("申请金额") / 1.1 * 0.07
ElseIf dr("应缴增值税基数") ="申请金额"  AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("本期需要增值税") = dr("申请金额") / 1.03 * 0.03
End If
'应缴增值税及成本差额计算
If dr.IsNull("应缴增值税基数") OrElse dr.IsNull("增值税征收方式") Then '为空
    dr("应缴增值税") = Nothing
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False  AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1
    dr("成本差额") = dr("合同金额")*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True  AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1
    dr("成本差额") = dr("合同金额")/1.1*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False  AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1
    dr("成本差额") = dr("合同金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True  AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("合同金额") / 1.1 * 0.1
    dr("成本差额") = dr("合同金额")/1.1 - dr("本期使用成本fa piao") - dr("本期使用人工工资")

ElseIf dr("应缴增值税基数") ="fa piao金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("fa piao金额") / 1.1 * 0.1
    dr("成本差额") = dr("fa piao金额")*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="fa piao金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("fa piao金额") / 1.1 * 0.1
    dr("成本差额") = dr("fa piao金额")/1.1*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="fa piao金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("fa piao金额") / 1.1 * 0.1
    dr("成本差额") = dr("fa piao金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="fa piao金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("fa piao金额") / 1.1 * 0.1
    dr("成本差额") = dr("fa piao金额")/1.1 - dr("本期使用成本fa piao") - dr("本期使用人工工资")

ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1
    dr("成本差额") = dr("申请金额")*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1
    dr("成本差额") = dr("申请金额")/1.1*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1
    dr("成本差额") = dr("申请金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="申请金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("申请金额") / 1.1 * 0.1
    dr("成本差额") = dr("申请金额")/1.1 - dr("本期使用成本fa piao") - dr("本期使用人工工资")

ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1
    dr("成本差额") = dr("计量金额")*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = False Then
    dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1
    dr("成本差额") = dr("计量金额")/1.1*0.92 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = False AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1
    dr("成本差额") = dr("计量金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
ElseIf dr("应缴增值税基数") ="计量金额" AndAlso dr("增值税征收方式") = "标准征收" AndAlso dr("是否扣税") = True AndAlso dr("成本比例") = True Then
    dr("应缴增值税") = dr("计量金额") / 1.1 * 0.1
    dr("成本差额") = dr("计量金额")/1.1 - dr("本期使用成本fa piao") - dr("本期使用人工工资")
    
    
ElseIf dr("应缴增值税基数") ="合同金额" AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("应缴增值税") = dr("合同金额") / 1.03 * 0.03
    dr("成本差额") = dr("合同金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
    
ElseIf dr("应缴增值税基数") ="fa piao金额"  AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("应缴增值税") = dr("fa piao金额") / 1.03 * 0.03
    dr("成本差额") = dr("fa piao金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
    
ElseIf dr("应缴增值税基数") ="申请金额"  AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("应缴增值税") = dr("申请金额") / 1.03 * 0.03
    dr("成本差额") = dr("申请金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")

ElseIf dr("应缴增值税基数") ="计量金额"  AndAlso dr("增值税征收方式") = "简易征收" Then
    dr("应缴增值税") = dr("计量金额") / 1.03 * 0.03
    dr("成本差额") = dr("计量金额") - dr("本期使用成本fa piao") - dr("本期使用人工工资")
End If

'成本差额税
Dim cc As String = e.Form.Controls("成本差额").value   '定义开piao日期输入框为d
Dim cs As String = e.Form.Controls("成本差额税率").value   '定义开piao日期输入框为d
If cc = 0 Then
    dr("成本差额税率") = Nothing
    dr("成本差额税") = Nothing
Else
    'dr("成本差额税率") = 25
    dr("成本差额税") = dr("成本差额") * dr("成本差额税率") / 100
End If
'企业所得税\个人所得税\管理费计算
If dr.IsNull("企业所得税基数") OrElse dr.IsNull("企业所得税率")Then '为空
    dr("企业所得税") = Nothing
ElseIf dr("企业所得税基数") ="合同金额"  Then
    dr("企业所得税") = dr("合同金额") * dr("企业所得税率") / 100
ElseIf dr("企业所得税基数") ="fa piao金额"  Then
    dr("企业所得税") = dr("fa piao金额") * dr("企业所得税率") / 100
ElseIf dr("企业所得税基数") ="申请金额"  Then
    dr("企业所得税") = dr("申请金额") * dr("企业所得税率") / 100
ElseIf dr("企业所得税基数") ="计量金额"  Then
    dr("企业所得税") = dr("计量金额") * dr("企业所得税率") / 100
End If

If dr.IsNull("个人所得税基数") OrElse dr.IsNull("个人所得税率")  Then '为空
    dr("个人所得税") = Nothing
ElseIf dr("个人所得税基数") ="合同金额"  Then
    dr("个人所得税") = dr("合同金额") * dr("个人所得税率") / 100
ElseIf dr("个人所得税基数") ="fa piao金额"  Then
    dr("个人所得税") = dr("fa piao金额") * dr("个人所得税率") / 100
ElseIf dr("个人所得税基数") ="申请金额"  Then
    dr("个人所得税") = dr("申请金额") * dr("个人所得税率") / 100
ElseIf dr("个人所得税基数") ="计量金额"  Then
    dr("个人所得税") = dr("计量金额") * dr("个人所得税率") / 100
End If

If dr.IsNull("计费基数") OrElse dr.IsNull("管理费费率")Then '为空
    dr("管理费") = Nothing
ElseIf dr("计费基数") ="合同金额"  Then
    dr("管理费") = dr("合同金额") * dr("管理费费率") / 100
ElseIf dr("计费基数") ="fa piao金额"  Then
    dr("管理费") = dr("fa piao金额") * dr("管理费费率") / 100
ElseIf dr("计费基数") ="申请金额"  Then
    dr("管理费") = dr("申请金额") * dr("管理费费率") / 100
ElseIf dr("计费基数") ="计量金额"  Then
    dr("管理费") = dr("计量金额") * dr("管理费费率") / 100
End If
[此贴子已经被作者于2019/1/25 22:06:54编辑过]

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望: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"))
……

 回到顶部