公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

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

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

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

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

主站蜘蛛池模板: 国产一区二区三区视频精品 | 国产精品毛片无码一区二区蜜 | 韩国美女av一区二区三区四区 | 国产成人激烈叫床声视频对白 | 激情欧美在线一区 | 国产在线一区二区三区网站 | 国产免费内射又粗又爽密桃视频 | 国产在线精品欧美日韩电影 | av视频| 国产在线拍偷自揄拍无码 | 国产精品多p对白交换绿帽 国产精品多人p | 精品波多野结衣av | 精品视频一区在线观看 | 午夜精品被窝影院 | 国产一区二区三区高清在线观看 | 91福利国产门事件在线观看 | 国产高清在线视频伊甸园 | 国产a一级毛片精品高清乱码 | 精品久久久久久无码中文字幕一 | 国产一区二区精品丝袜 | 国产美女爽到喷出水来视频 | 国产a级理论 | 国产精品成人一区 | 91午夜精品福利视频 | 国产精品无码国模私拍视频 | 国产精品流白浆免费 | 国产一区二区三区内射高清 | 精品亚洲一区二区在线播放 | 成午夜精品一区二区三区秒播 | 动漫精品一区二区三区在线 | 国产精品一级二级 | 国产成人久久精品激情91 | 国产精品人成在线观看 | 国产超清无码视频 | 国产99久久久国 | 国产超碰在线观看 | 国产成人久久精品二区三区 | 国产日韩欧美一区二区三区视频 | 国产三级在线观看播放视频 | 国产午夜电影久久 | 精品国产女主播在 |