麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > SQL Server > 正文

SQL Server Parameter Sniffing及其改進方法

2024-08-31 01:04:58
字體:
來源:轉載
供稿:網友

SQL Server 在處理存儲過程的時候,為了節省編譯時間,是一次編譯,多次重用。當第一次運行時代入值產生的執行計劃,不適用后續代入的參數時,就產生了parameter sniffing問題。 create procedure Sniff1(@i int) as SELECT count(b.SalesOrderID),sum(p.weight) from [Sale
SQL Server 在處理存儲過程的時候,為了節省編譯時間,是一次編譯,多次重用。當第一次運行時代入值產生的執行計劃,不適用后續代入的參數時,就產生了parameter sniffing問題。

create procedure Sniff1(@i int) as SELECT count(b.SalesOrderID),sum(p.weight) from [Sales].[SalesOrderHeader] ainner join [Sales].[SalesOrderDetail] bon a.SalesOrderID = b.SalesOrderIDinner join Production.Product pon b.ProductID = p.ProductIDwhere a.SalesOrderID =@i;goDBCC FREEPROCCACHEexec Sniff1 50000;exec Sniff1 75124;go

SQLServer,Parameter,Sniffing

Parameter Sniffing問題發生不頻繁,只會發生在數據分布不均勻或者代入參數值不均勻的情況下。現在,我們就來探討下如何解決這類問題。

1. 使用Exec() 方式運行動態SQL

create procedure Nosniff1(@i int) as declare @cmd varchar(1000);set @cmd = 'SELECT count(b.SalesOrderID),sum(p.weight) from [Sales].[SalesOrderHeader] ainner join [Sales].[SalesOrderDetail] bon a.SalesOrderID = b.SalesOrderIDinner join Production.Product pon b.ProductID = p.ProductIDwhere a.SalesOrderID ='; exec(@cmd+@i); go

SQLServer,Parameter,Sniffing

exec Nosniff1 50000;

SQLServer,Parameter,Sniffing

exec Nosniff1 75124;

從上述trace中可以看到,在執行查詢語句之前,都有SP: CacheInsert事件,SQL Server做了動態編譯,根據變量的值,都正確的預估了結果集,給出了不同的執行計劃。

2. 使用本地變量

create procedure Nosniff2(@i int) as declare @iin int;set @iin=@iSELECT count(b.SalesOrderID),sum(p.weight) from [Sales].[SalesOrderHeader] ainner join [Sales].[SalesOrderDetail] bon a.SalesOrderID = b.SalesOrderIDinner join Production.Product pon b.ProductID = p.ProductIDwhere a.SalesOrderID =@iin;go

exec Nosniff2 50000;

SQLServer,Parameter,Sniffing

SQLServer,Parameter,Sniffing

exec Nosniff2 75124;

SQLServer,Parameter,Sniffing

SQLServer,Parameter,Sniffing

如上一篇文章所述,使用本地變量,參數值在存儲過程語句執行過程中得到,SQL Server在運行時不知道變量的值,會根據一個預估值進行編譯,給出一個折中的執行計劃。

3. 使用Query Hint,指定執行計劃

在 SELECT、DELETE、UPDATE 和 MERGE 語句最后加上OPTION ( [ ,...n ] ),對執行計劃進行指導。當數據庫管理員知道問題所在時,可以通過hint引導SQL Server生成一個對所有變量都不太差的執行計劃。

以上所述是小編給大家介紹的SQL Server Parameter Sniffing及其改進方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美第1页| 日韩黄色免费观看 | 亚洲一级片在线观看 | 92看片淫黄大片欧美看国产片 | 久久久aa| 国产在线导航 | 国产91一区| 在线97视频| 性生活视频一级 | 国产精品久久久久久影院8一贰佰 | 欧美日韩亚洲精品一区二区三区 | 中文字幕在线免费观看电影 | 亚洲成人欧美在线 | 一日本道久久久精品国产 | 国产精品久久久久久久四虎电影 | 中文字幕一区久久 | 三人弄娇妻高潮3p视频 | 成人精品一区二区 | 九九视频精品在线 | hd极品free性xxx护士人 | 97超级碰碰人国产在线观看 | 激情在线免费观看 | 九九热精品视频在线免费观看 | 毛片免费一区二区三区 | 亚洲欧美国产高清va在线播放 | 成人国产精品齐天大性 | 嫩嫩的freehdxxx | 日韩黄色免费电影 | 欧美成人视 | 久久精品一区二区三区四区五区 | 久久精品男人 | 久久久久久久久久久久久国产精品 | 黄色7777 | 欧美一级黄色影院 | 国产成人av一区二区 | 在线中文资源免费 | 搜一级毛片 | 亚洲免费在线看 | 三级xxxx| 日韩黄在线观看 | 香蕉久草在线 |