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 server中如何檢視執行效率不高的語句SQLServer
- Oracle環境下SQL語句的不同寫法效率對比OracleSQL
- 檢視低效的SQL語句SQL
- 【SQL】Oracle sql語句 minus函式執行效率與join對比SQLOracle函式
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- sqlserver dba常用的sql語句SQLServer
- 檢視mysql正在執行的SQL語句MySql
- SQLServer資料庫管理常用的SQL和T-SQL語句SQLServer資料庫
- Oracle 檢視佔用undo大的sql語句OracleSQL
- 檢視造成等待事件的具體SQL語句事件SQL
- sqlserver採集欄位的sql語句SQLServer
- oracle 對比sql語句執行環境OracleSQL
- 查詢效率低下的sql的語句SQL
- SQL語句大全—檢視錶空間(二)SQL
- SQL語句大全—檢視錶空間(一)SQL
- 高效率Oracle SQL語句OracleSQL
- mysql查詢效率慢的SQL語句MySql
- 檢視sqlserver的某程式的sql文字SQLServer
- 檢視包正在被哪個程式使用,檢視包含SQL語句的PACKAGESQLPackage
- SQLServer資料庫管理的常用SQL語句SQLServer資料庫
- 用LinqPad檢視Nhibernate生成的sql語句SQL
- 檢視當前oracle中正在執行的sql語句OracleSQL
- 在mysql查詢效率慢的SQL語句MySql
- 根據作業系統程式號檢視oracle對應的SQL語句內容作業系統OracleSQL
- 檢視v$sql_shared_cursor檢視獲取sql語句為什麼不能共享?SQL
- MySQL_通過binlog檢視原始SQL語句MySql
- 通過日誌檢視mysql正在執行的SQL語句MySql
- 語句效率統計檢視 | 全方位認識 sys 系統庫
- SQLServer效能優化之改寫SQL語句SQLServer優化
- MySql定位執行效率較低的SQL語句MySql
- 用SQL語句檢查CPU和磁碟空間SQL
- Vue和React的檢視更新機制對比VueReact
- Oracle和SQL對比語法總結OracleSQL
- Mongodb操作之查詢(循序漸進對比SQL語句)MongoDBSQL
- 常用的檢查SQL Agent Job 語句SQL
- 檢視mysql連線數 sql語句執行時間MySql
- 【檢視】使用V$SQL_PLAN檢視獲取曾經執行過的SQL語句執行計劃SQL
- 基於dba_hist_sqlstat檢視sql語句的效能歷史SQL