Foxtable(狐表)用户栏目专家坐堂 → 查询超时


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

主题:查询超时

美女呀,离线,留言给我吧!
nuoyan89
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:415 积分:2896 威望:0 精华:0 注册:2020/10/9 8:45:00
查询超时  发帖心情 Post By:2024/5/6 20:10:00 [只看该作者]

老师,我以下代码写在窗口表的组件事件中的,上个月用得还好好的,现在点击时总提示查询超时,如图1
If Forms("资产折旧明细").Controls("加工日期1").Text = Nothing AndAlso Forms("资产折旧明细").Controls("加工日期2").Text = Nothing Then
    MessageBox.Show("使用月份不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
Else
    Dim dr As Date = Forms("资产折旧明细").Controls("加工日期1").Text
    Dim dr1 As Date = Forms("资产折旧明细").Controls("加工日期2").Text
    Dim cmd As New SQLC ommand
    cmd.C
    cmd.C ommandText = "U PDATE  a se t  a.制造费用_设备折旧 = b.本月折旧 / c.加工时间  * a.加工时间  from 工序跟踪表 as a  left join 资产折旧明细 as b on a.月份 = b.月份 and a.使用设备 = b.资产编号 and b.折旧类型 = '按设备算' inner join (S elect 月份,使用设备 , sum(加工时间) as 加工时间  From 工序跟踪表 g roup by 月份,使用设备) as c on a.月份 = c.月份  and a.使用设备 = c.使用设备 and a.实际加工日期 >= '" & dr & "'and a.实际加工日期 <= '" & dr1 & "'"
    cmd.E xecuteNonQuery()
    Dim cmd1 As New SQL Command
    cmd1.C
    cmd1.C ommandText = "UP DATE  a1 S et a1.制造费用_其他折旧  = b1.本月折旧 / c1.加工时间 * a1.加工时间   From (S elect 月份, Sum(本月折旧) As 本月折旧 From 资产折旧明细 w here 折旧类型 = '按汇总算' group by 月份) as b1 ,工序跟踪表 as a1,(S elect 月份, sum(加工时间) as 加工时间  From 工序跟踪表 group by 月份 ) as c1 W here a1.月份 = b1.月份 and a1.月份=c1.月份 and a1.实际加工日期 >= '" & dr & "'and a1.实际加工日期 <= '" & dr1 & "'"
    cmd1.E xecuteNonQuery()
End If

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2024/5/6 20:10:44编辑过]

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


加好友 发短信
等级:超级版主 帖子:106816 积分:543281 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 20:18:00 [只看该作者]

应该是数据多了,给工序跟踪表、资产折旧明细表加上必要的索引:https://www.baidu.com/s?wd=SqlServer%20%E6%B7%BB%E5%8A%A0%E7%B4%A2%E5%BC%95

优化数据库可以看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=158943&replyID=&skin=1
[此贴子已经被作者于2024/5/6 20:43:33编辑过]

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:415 积分:2896 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2024/5/6 20:35:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码.txt

我只需要算当月的,我现在是要算月份为202403,开始日期:2024-03-01,结束日期:2024-03-31,资产折旧明细表这个表里是79行,工序跟踪表这个表是11万行。不知道是不是因为一楼的代码分配了数据库的所有行了。代码如附件

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码.txt



[此贴子已经被作者于2024/5/6 20:35:21编辑过]

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


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

和代码无关,优化数据库 ,加上索引

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:415 积分:2896 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2024/5/6 20:49:00 [只看该作者]

我想说的意思是我那代码是按照对应的月份在分配吗?比如:数据库后台工序跟踪表里数据有30万行,但是202403这个月份的只有11万,那个代码是直接分配这11万的还是30万行的
[此贴子已经被作者于2024/5/6 20:50:06编辑过]

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:415 积分:2896 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2024/5/6 21:02:00 [只看该作者]

或者能否把如图1圈起来的两个表改成用窗口表呢?


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:106816 积分:543281 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 21:09:00 [只看该作者]

如果没有索引,数据库是搜索2个表所有的30W+11W数据,然后找出匹配的结果。

如果有合适的索引,数据库会根据索引信息,提取符合条件的数据,再进行匹配出结果。

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:415 积分:2896 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2024/5/6 21:16:00 [只看该作者]

6楼的可以改吗?

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


加好友 发短信
等级:超级版主 帖子:106816 积分:543281 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/5/6 21:52:00 [只看该作者]

不可以。临时表无法使用sql

 回到顶部