1. 程式人生 > >sqlserver 檢視和sql語句的效率對比

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 RECOMPILEOPTION(RECOMPILE)區別僅僅是儲存過程級重編譯SQL語句級重編譯嗎

 在考慮重編譯T-SQL(或者儲存過程)的時候,有兩種方式可以實現強制重編譯(前提是忽略導致重編譯的其他因素的情況下,比如重建索引,更新統計資訊等等),  一是基於WITH RECOMPILE的儲存過程級別重編譯,另外一種是基於OPTION(RECOMPILE)的語句級重編譯。  之前瞭解的比較淺,

mybatis介面SQL語句繫結

SessionFactory factory=Resources.getResourceAsReader(“”); SqlSession session=factory.getSession(); 根據介面中的方法,到與介面對應的名稱空間的xml對映檔案中找與方法相同的I

Hive中distinctGroup by效率對比及處理方式

select res.flag AS flag ,res.source AS source ,res.template AS template ,SUM(res.click_user)

PHP防止被xsssql語句注入攻擊的方法(網站app通用)

傳過來的引數 如果是整數型別 那就直接用intval函式轉化為整數 字串 那就要用函數了 注意輸入的內容htmlspecialchars過濾程式碼如下 // Anti_SQL Injection, escape quotes function filter($content

使用 EXPLAIN 關鍵字 檢查SQL語句效率

explain詳細說明 通過explain可以知道mysql是如何處理語句,分析出查詢或是表結構的效能瓶頸。通過expalin可以得到: 1. 表的讀取順序 2.表的讀取操作的操作型別 3.哪些索引可以使用 4. 哪些索引被實際使用 5.表之間的引用 6.每張表有多少行被優