奇怪,奇怪,真奇怪!!!

wuzhongbaobupt 2009-11-19 07:25:54
语句A:
SELECT RIGHT(BB.ServerID,1) AS BssID,BB.BtsId
,COUNT(*) AS CNT
FROM tempdb.dbo.GetMaxTimeBtsDoErl AS AA,
(SELECT BeginTime,SERVERID,BTSID
,SUM(FwdNinthLevel+FwdTenthLevel) AS FwdEighthToTenth
,COUNT(*) AS E1Num
FROM WY_CAS_BSS3G_DB.DBO.H_P_IPE1Flux
WHERE BeginTime>='2009-11-12' AND BeginTime<'2009-11-19' --BeginTime>=@Date-6 AND BeginTime<@Date+1--
GROUP BY BeginTime,ServerID,BtsID ) AS BB
WHERE AA.BeginTime=BB.BeginTime AND AA.BSSID=RIGHT(BB.SERVERID,1) AND AA.BTSID=BB.BTSID
AND FwdEighthToTenth>720*E1Num --平均每条前向占用带宽在80-100%的时间(s)超过720s,即20%
GROUP BY RIGHT(BB.ServerID,1),BB.BtsID

语句B:
UPDATE A SET A.[COUNT]=B.CNT
FROM tempdb.dbo.ExpansionPlanBtsE1 AS A,
(SELECT RIGHT(BB.ServerID,1) AS BssID,BB.BtsId
,COUNT(*) AS CNT
FROM tempdb.dbo.GetMaxTimeBtsDoErl AS AA,
(SELECT BeginTime,SERVERID,BTSID
,SUM(FwdNinthLevel+FwdTenthLevel) AS FwdEighthToTenth
,COUNT(*) AS E1Num
FROM WY_CAS_BSS3G_DB.DBO.H_P_IPE1Flux
WHERE BeginTime>='2009-11-12' AND BeginTime<'2009-11-19' --BeginTime>=@Date-6 AND BeginTime<@Date+1--
GROUP BY BeginTime,ServerID,BtsID ) AS BB
WHERE AA.BeginTime=BB.BeginTime AND AA.BSSID=RIGHT(BB.SERVERID,1) AND AA.BTSID=BB.BTSID
AND FwdEighthToTenth>720*E1Num --平均每条前向占用带宽在80-100%的时间(s)超过720s,即20%
GROUP BY RIGHT(BB.ServerID,1),BB.BtsID) AS B
WHERE A.BSSID=B.BSSID AND A.BTSID=B.BTSID

为什么语句A很快就运行完,而将语句A放入到语句B中就相当慢,如果将A语句得出的结果放入到一张表中,将更新tempdb.dbo.ExpansionPlanBtsE1数据就很快,难道SQL自己不会先运行A语句,再赋值???
请高手指教,非常感谢!
...全文
101 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2009-11-20
  • 打赏
  • 举报
回复
。。
hyqok 2009-11-20
  • 打赏
  • 举报
回复
会写一句很长的,嵌套了很多级的sql 就是高手吗?一句很长的sql 让微软替你选择最优执行顺序,你真的太为难微软了,有n种方案选择,执行计划判断也是需要时间的,习惯去用临时表吧。
lixiao1387 2009-11-20
  • 打赏
  • 举报
回复
一个是查询,一个是更新,相同么
kasin000 2009-11-19
  • 打赏
  • 举报
回复
用cte 也可以 ,不然效率很低,要是Update10000条 A语句要执行10000此。。。。
不知道能不能一个sql 搞定。等高手。。
wuzhongbaobupt 2009-11-19
  • 打赏
  • 举报
回复
我是不想创一个临时表,想在一条语句中直接赋值,结果很慢,奇怪,可能是SQL不能按自己的顺序执行,先运算A表得出结果,再赋值
kasin000 2009-11-19
  • 打赏
  • 举报
回复
每次更新一条记录都会运行A语句。最好用个灵石表或通用表达式什么的。。。
icelovey 2009-11-19
  • 打赏
  • 举报
回复
看了一下, 理论上一样的查询的话不会变慢啊。。
用临时表相对还会慢点。。我经常在UPDATE语句中嵌套子查询的。
--小F-- 2009-11-19
  • 打赏
  • 举报
回复
嵌套太多 想不慢都不行
SQL77 2009-11-19
  • 打赏
  • 举报
回复
如果将A语句得出的结果放入到一张表中,将更新tempdb.dbo.ExpansionPlanBtsE1数据就很快

临时表的效率可以体现下,呵呵
icelovey 2009-11-19
  • 打赏
  • 举报
回复
眼花。。有请楼下
SQL77 2009-11-19
  • 打赏
  • 举报
回复
一个是查询,一个是更新,相同么
bancxc 2009-11-19
  • 打赏
  • 举报
回复
真奇怪 看不懂
feixianxxx 2009-11-19
  • 打赏
  • 举报
回复
长题不看。。
等高手帮你 ~

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧