sqlserver 檢視和sql語句的效率對比

SieSteven發表於2015-09-24

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, cc.ClassID, 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, t .Title, t .Subject, cp.TeacherId, cp.ReceiveCount, cp.DownDate,u.School
,tt.Name


紅色條件加入前後執行時間差別很大。一個是一分八秒,一個是兩秒。看來還是空間換時間比較划算

相關文章