以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]奇怪的SQL查询效率问题,头大了 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=170843) |
-- 作者:huangfanzi -- 发布时间:2021/8/9 13:41:00 -- [求助]奇怪的SQL查询效率问题,头大了 以下是涉及的部分代码: Dim rq1 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker_起始日期") Dim rq2 As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker_结束日期") If rq1.Value = Nothing Then rq1.Value = #5/1/2017# End If If rq2.Value = Nothing Then rq2.Value = _dt工序合并表.SQLCompute("MAX(日期)") End If Dim filter As String filter = "a.起始时间 >= \'" & rq1.Value & "\' And a.起始时间 < \'" & rq2.Value.AddDays(1) & "\' And (a.工序 = \'原料采购入库\' Or a.工序 = \'来料加工入库\' Or a.工序 = \'并卷转入\' Or a.工序 = \'盘盈入库\')" Tables(e.Form.Name & "_Table1").Fill("s elect \'\' As 顺序号,a.母卷号,a.牌号,a.工序,a.往来公司,a.起始时间 As 入库时间,a.厚度,a.宽度,a.重量 As 原料重量,(s elect Sum(重量) from {工序合并表} b where b.库存标记 = 1 And a.母卷号 = b.母卷号 And b.起始时间 >= \'" & rq1.Value & "\' And b.工序 <> \'废品入库\' And b.工序 <> \'盘亏出库\' And b.工序 <> \'引带入库 \') as 成材重量 from {工序合并表} as a where " & filter ,"ShcsErpSql",True) 代码执行的结果没有问题,但是,起始日期不录,几秒就能出结果,录2021-4-1号,也是几秒出结果,录2021-4-3,就要20秒出结果,随便输入一些日期,有的日期执行效率非常高,有的非常慢,这是何解啊 一般情况下,我如果不录日期,代码自动使用的起始日期是#5/1/2017#,结束日期是今天,按理来说,这个时间跨度应该比起始日期是2021-4-10大,查询效率慢才对,可结果完全不是这么回事,问题应该就出在红字部分,因为我把红字去掉,查询结果的速度全很快。 实在想不明白,请老师解惑下,谢谢! |
-- 作者:有点蓝 -- 发布时间:2021/8/9 13:51:00 -- SqlServer有个执行计划,可以分析一下sql语句的执行效率:https://www.baidu.com/baidu?word=SqlServer+%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%92 自动分析不同情况下执行情况。另外看看是不是也有其他用户在查询处理第一个表数据,多人并发处理会互相影响的。 至于具体情况除非提供数据库做分析,否则我也没有办法判断到底是什么原因
|
-- 作者:huangfanzi -- 发布时间:2021/8/9 13:57:00 -- 就我一人在用,排除其他人一起用的情况 我把开发程序包发你吧,帮我看看可否?
|
-- 作者:有点蓝 -- 发布时间:2021/8/9 13:59:00 -- 先自行优化,分析一下。 |
-- 作者:rjh4078 -- 发布时间:2021/8/9 21:03:00 -- 你把红字部分的时间判断 And b.起始时间 >= \'" & rq1.Value & "\' 去掉 |