加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 视图和sql语句的效率对比

发布时间:2020-12-12 13:13:04 所属栏目:MsSql教程 来源:网络整理
导读:2015-9-25小记 先放结论:1、执行视图的时间是执行SQL语句时间的4倍以上;2、编写sql语句的时候,可以先各种join之后再添加where过滤条件。 1、昨天写了本文,作为小记。但是临近下班项目发布后的执行情况又让我大跌眼镜,如果调用视图,直接报超时错误。之

2015-9-25小记

先放结论:1、执行视图的时间是执行SQL语句时间的4倍以上;2、编写sql语句的时候,可以先各种join之后再添加where过滤条件。

1、昨天写了本文,作为小记。但是临近下班项目发布后的执行情况又让我大跌眼镜,如果调用视图,直接报超时错误。之后换做了执行SQL语句。不再报超时错误。

2、刚开始编写sql语句的时候,把各种条件都添加到了各个UNION的select语句之中。查询时间为40秒以上。效率实在不过关,因此把查询结果放入了临时表,之后对临时表进行where筛选。此时时间缩短为10秒以上。


因此得出上述结论,并推翻昨天文章的内容。并且,实践证明:若考虑效率,尽量避免使用视图!

2015-9-24 小记

此文为小记。

最近处理项目遗留的问题。多数是数据查询分析这块内容的BUG.刚开始很不解为什么会有那么多视图。由于对视图具有天生的鄙视,总是觉得视图只是查询方便一些,但是控件和效率总是不及直接执行SQL语句快。

但是今天,这种想法被颠覆了一下

SELECT ? ? t .FileID,t .Title,t .Subject,cp.TeacherId,MAX(t .Point) AS point,COUNT(DISTINCT t .UserId) AS testcount,cp.ReceiveCount,MAX(t .Score) AS maxscore,MIN(t .Score)?
? ? ? ? ? ? ? ? ? ? ? AS minscore,ROUND(AVG(t .Score),1) AS avgscore,cp.DownDate,max(t .UploadTime) UploadTime,u.School
?,tt.Name
FROM ? ? ? ? dbo.View_Csw_TestRult_First AS t INNER JOIN
? ? ? ? ? ? ? ? ? ? ? dbo.Csw_users AS u ON t .UserId = u.userid INNER JOIN
? ? ? ? ? ? ? ? ? ? ? dbo.CWInforTable AS cw ON t .FileID = cw.FTPFileName INNER JOIN
? ? ? ? ? ? ? ? ? ? ? ? ? (SELECT ? ? COUNT(cu.userid) AS ReceiveCount,hm.FileName,cc.ClassID,cl.TeacherId,MAX(hm.DownDate) AS DownDate
? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM ? ? ? ? ?dbo.HomeWork AS hm INNER JOIN
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dbo.PK_HomeWorkAndClass AS cc ON hm.pkid = cc.HomeWorkID INNER JOIN
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dbo.Csw_users AS cu ON cu.ClassId = cc.ClassID INNER JOIN
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dbo.Csw_Class AS cl ON cu.ClassId = cl.ClassId
? ? ? ? ? ? ? ? ? ? ? ? ? ? WHERE ? ? ?hm.FileName IS NOT NULL
? ? ? ? ? ? ? ? ? ? ? ? ? ? GROUP BY hm.FileName,cl.TeacherId) AS cp ON cw.ID = cp.FileName AND u.ClassId = cp.ClassID
left join Csw_TypeTable as tt on tt.ID=t.ColumnType

where 1=1
?and school='bsdfz' and teacherID='yqjnjbzr1' and cp.DownDate>='2015-08-28 00:00:00' and cp.DownDate<='2015-09-24 23:59:59'
and tt.ID!=7
and tt.Type=3
GROUP BY t .FileID,u.School
,tt.Name


红色条件加入前后执行时间差别很大。一个是一分八秒,一个是两秒。看来还是空间换时间比较划算

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读