sqlserver 檢視和sql語句的效率對比
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
紅色條件加入前後執行時間差別很大。一個是一分八秒,一個是兩秒。看來還是空間換時間比較划算
相關文章
- 【SQL】Oracle sql語句 minus函式執行效率與join對比SQLOracle函式
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- sqlserver dba常用的sql語句SQLServer
- T-SQL運維指令碼——檢視SQLServer平均最耗資源時間的SQL語句SQL運維指令碼Server
- sqlserver採集欄位的sql語句SQLServer
- mysql查詢效率慢的SQL語句MySql
- 檢視sqlserver的某程式的sql文字SQLServer
- MySQL_通過binlog檢視原始SQL語句MySql
- oracle資料庫檢視鎖表的sql語句整理Oracle資料庫SQL
- 在mysql查詢效率慢的SQL語句MySql
- Sqlserver定位哪些物件和哪些會話哪些sql語句消耗了tempdbSQLServer物件會話
- 語句效率統計檢視 | 全方位認識 sys 系統庫
- Laravel ORM SQL 語句查詢、檢視,附贈 IDE ORM 語法提示LaravelORMSQLIDE
- [20190125]簡單快速檢視那些sql語句正在執行.txtSQL
- SqlServer中迴圈和條件語句SQLServer
- Vue和React的檢視更新機制對比VueReact
- MySQL檢視建表語句MySql
- oracle檢視物件DDL語句Oracle物件
- MySql和簡單的sql語句MySql
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視.txtSQL
- 【VIEW】Oracle如何查詢固定檢視的定義或底層sql語句ViewOracleSQL
- SSH框架控制檯輸出HQL語句和SQL語句的方法框架SQL
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- SQL語句IN的用法SQL
- 檢視 Laravel 查詢資料語句Laravel
- [20200422]跟蹤特定sql語句以及v$open_cursor檢視(補充).txtSQL
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視2.txtSQL
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- SQL SELECT 語句SQL
- sql常用語句SQL
- Mybatis 裡對映檔案的動態 SQL 語句,實現if,where,foreache的SQL語句動態拼接查詢MyBatisSQL
- 【SQL】Oracle 表新增列提高效率語句參考SQLOracle
- [20200424]跟蹤特定sql語句以及v$open_cursor檢視(再補充).txtSQL
- pl/sql中三種遊標迴圈效率對比SQL