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
紅色條件加入前後執行時間差別很大。一個是一分八秒,一個是兩秒。看來還是空間換時間比較划算
相關推薦
sqlserver 檢視和sql語句的效率對比
2015-9-25小記 先放結論:1、執行檢視的時間是執行SQL語句時間的4倍以上;2、編寫sql語句的時候,可以先各種join之後再新增where過濾條件。 1、昨天寫了本文,作為小記。但是臨近下班專案釋出後的執行情況又讓我大跌眼鏡,如果呼叫檢視,直接報超時錯誤。之後換做
在SqlServer中通過SQL語句實現樹狀查詢
clas all bold join where procedure ner log class 1 CREATE PROCEDURE [dbo].[GetTree] 2 @Id int 3 AS 4 BEGIN 5 with cte as
druid監控每個服務數據庫連接數和SQL執行效率
xml文件 dmi authent XML 分享圖片 url col user sta 1、下載druid 2、將剛剛下載的druid放入tomcat下的lib目錄 3、配置要監控的服務啟動文件,添加:-Djava.net.preferIPv4Stack=true -Dco
mysql優化和sql語句優化總結
結構 沒有 sele 大量 unsigned 他還 判斷 pla 可能 mysql性能優化 1、 EXPLAIN 你的 SELECT 查詢。使用 EXPLAIN 關鍵字可以讓你知道MySQL是如何處理你的SQL語句的。這可以幫你分析你的查詢語句或是表結構的性能瓶頸。 2、為
java中String字串拼接“+”和StringBuffer的效率對比
1、前言 (1)最近在做資料傳輸時,由於接收的資料量較大,在字串拼接時使用了以前感覺方便的“+”進行字串拼接,最後拼接到最後時間越來越多,導致效率變慢。 2、String拼接 首先來看一下兩個String用“+”號拼接需要的時間 String aa="E0 00 00 00 00
人家的Python資料庫連線類和sql語句拼接方法
原文出處: sql拼接方法 # encoding=utf-8 from django.http import HttpResponse from anyjson import serialize from django.http import HttpRespon
mysql 遍歷所有的庫並根據表和sql語句備份
建庫、使用者語句 create database test_hb; create user ' test_hb'@'%' identified by '123456'; grant all privileges on test_hb.* to ' test_hb'@'%'; grant a
SQL 語句效率問題(如何寫出高效能的SQL語句)
1.關於SQL查詢效率,100w資料,查詢只要1秒,與您分享: 機器情況 p4: 2.4 記憶體: 1 G os: windows 2003 資料庫: ms sql server 2000 目的: 查詢效能測試,比較兩種查詢的效能 SQL查詢效率 step by step
SQLserver檢視修改sql
語法: alter view dbo.檢視名 as 更新後的檢視SQL go 舉個栗子: 原檢視名為YOUR_VIEW其中SQL為: select * form TableA 更新檢視: alter view dbo.YOUR_VIEW_
如何檢測mvc效能和sql語句
mvc中使用linq如何檢測sql語句 .net中使用mvc開發已經是一種趨勢,不僅僅是.net ,java 等越來越多的開發者更傾向於mvc這種開發模式,在.net mvc 使用linq非常方便,各種方法擴充套件也是很方便的,看不到sql語句這個使用就要使用 MiniPr
常見sql語句效率優化方式
首先介紹幾條優化原則: 儘量避免where中包含子查詢; where條件中,過濾量最大的條件放在where子句最後; 採用繫結變數有助於提高效率; 在索引列上使用計算、改變索引列的型別、在索引列上使用!=將放棄索引;
Linux下Mongodb安裝,命令列操作和sql語句
--logappend --port=27017 --fork 5. 引數解釋: --dbpath 資料庫路徑(資料檔案)--logpath 日誌檔案路徑--master 指定為主機器--slave 指定為從機器--source 指定主機器的IP地址--pologSize 指定日誌檔案大小不超過64M.因為
自己寫的Python資料庫連線類和sql語句拼接方法
這個工具類十分簡單和簡潔。 sql拼接方法 # encoding=utf-8 from django.http import HttpResponse from anyjson import serialize from django.http import HttpRespo
淺談mysql配置優化和sql語句優化
做優化,我在這裡引用淘寶系統分析師蔣江偉的一句話:只有勇於承擔,才能讓人有勇氣,有承擔自己的錯誤的勇氣。有承擔錯誤的勇氣,就有去做事得勇氣。無論做什麼事,只要是對的,就要去做,勇敢去做。出了錯誤,承擔錯誤,改正錯誤,這樣的人沒有人會去責怪。 很久之前就想
系統技術非業餘研究 » 大檔案重定向和管道的效率對比
微博上的@拉風_zhang提出了個問題: @淘寶褚霸 請教個問題,#1. cat huge_dump.sql | mysql -uroot ;#2. mysql -uroot < huge_dump.sql ;#1效率要高,在linux中通過管道傳輸 和 < 這種方式有什麼差別
WITH RECOMPILE和OPTION(RECOMPILE)區別僅僅是儲存過程級重編譯和SQL語句級重編譯嗎
在考慮重編譯T-SQL(或者儲存過程)的時候,有兩種方式可以實現強制重編譯(前提是忽略導致重編譯的其他因素的情況下,比如重建索引,更新統計資訊等等), 一是基於WITH RECOMPILE的儲存過程級別重編譯,另外一種是基於OPTION(RECOMPILE)的語句級重編譯。 之前瞭解的比較淺,
mybatis介面和SQL語句繫結
SessionFactory factory=Resources.getResourceAsReader(“”); SqlSession session=factory.getSession(); 根據介面中的方法,到與介面對應的名稱空間的xml對映檔案中找與方法相同的I
Hive中distinct和Group by效率對比及處理方式
select res.flag AS flag ,res.source AS source ,res.template AS template ,SUM(res.click_user)
PHP防止被xss和sql語句注入攻擊的方法(網站和app通用)
傳過來的引數 如果是整數型別 那就直接用intval函式轉化為整數 字串 那就要用函數了 注意輸入的內容htmlspecialchars過濾程式碼如下 // Anti_SQL Injection, escape quotes function filter($content
使用 EXPLAIN 關鍵字 檢查SQL語句效率
explain詳細說明 通過explain可以知道mysql是如何處理語句,分析出查詢或是表結構的效能瓶頸。通過expalin可以得到: 1. 表的讀取順序 2.表的讀取操作的操作型別 3.哪些索引可以使用 4. 哪些索引被實際使用 5.表之間的引用 6.每張表有多少行被優