欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL Server中存儲過程慢于SQL語句直接執行的原因

admin
2011年5月5日 8:45 本文熱度 2954

SQL Server數據庫中,存儲過程的執行總是要比SQL語句直接執行要慢,這究竟是為什么呢?本文將帶您尋找答案。


在SQL Server中有一個叫做 “Parameter sniffing”的特性。SQL Server在存儲過程執行之前都會制定一個執行計劃。在上面的例子中,SQL在編譯的時候并不知道@thedate的值是多少,所以它在執行執行計劃的時候就要進行大量的猜測。假設傳遞給@thedate的參數大部分都是非空字符串,而FACT表中有40%的thedate字段都是null,那么SQL Server就會選擇全表掃描而不是索引掃描來對參數@thedate制定執行計劃。全表掃描是在參數為空或為0的時候最好的執行計劃。但是全表掃描嚴重影響了性能。


假設你第一次使用了Exec pro_ImAnalysis_daily @thedate=’20080312’那么SQL Server就會使用20080312這個值作為下次參數@thedate的執行計劃的參考值,而不會進行全表掃描了,但是如果使用@thedate=null,則下次執行計劃就要根據全表掃描進行了。


有兩種方式能夠避免出現“Parameter sniffing”問題:
<!--(1)通過使用declare聲明的變量來代替參數:使用set @variable=@thedate的方式,將出現@thedate的sql語句全部用@variable來代替。
<!--(2) 將受影響的sql語句隱藏起來,比如:
<!-- a)      將受影響的sql語句放到某個子存儲過程中,比如我們在@thedate設置成為今天后再調用一個字存儲過程將@thedate作為參數傳入就可以了。
<!-- b)      使用sp_executesql來執行受影響的sql。執行計劃不會被執行,除非sp_executesql語句執行完。
<!-- c)      使用動態sql(”EXEC(@sql)”來執行受影響的sql。
采用(1)的方法改造例子中的存儲過程,如下:


代碼:


ALTER PROCEDURE [dbo].[pro_ImAnalysis_daily]@var_thedate VARCHAR(30) ASBEGIN    declare @THEDATE VARCHAR(30)    IF @var_thedate IS NULL    BEGIN       SET @var_thedate=CONVERT(VARCHAR(30),GETDATE()-1,112);    END      SET @THEDATE=@var_thedate;    DELETE FROM RPT_IM_USERINFO_DAILY WHERE THEDATE=@THEDATE;    INSERT RPT_IM_USERINFO_DAILY (THEDATE,ALLUSER,NEWUSER)    SELECT AA.THEDATE,ALLUSER,NEWUSER    FROM    ( ( SELECT THEDATE,COUNT(DISTINCT USERID) ALLUSER       FROM FACT       WHERE THEDATE=@THEDATE        GROUP BY THEDATE       ) AA       LEFT JOIN       (SELECT THEDATE,COUNT(DISTINCT USERID) NEWUSER        FROM FACT T1        WHERE NOT EXISTS(                         SELECT 1                         FROM FACT T2                         WHERE T2.THEDATE<@THEDATE                             AND T1.USERID=T2.USERID)              AND T1.THEDATE=@THEDATE        GROUP BY THEDATE        ) BB       ON AA.THEDATE=BB.THEDATE);GO


該文章在 2011/5/5 8:45:23 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved