最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL Server Parameter Sniffing及其改進方法

 更新時間:2017年06月29日 09:45:53   投稿:mrr  
這篇文章主要介紹了SQL Server Parameter Sniffing及其改進方法,需要的朋友可以參考下

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

create procedure Sniff1(@i int) as 
SELECT count(b.SalesOrderID),sum(p.weight) from 
[Sales].[SalesOrderHeader] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID =@i;
go
DBCC FREEPROCCACHE
exec Sniff1 50000;
exec Sniff1 75124;
go

Parameter Sniffing問題發(fā)生不頻繁,只會發(fā)生在數(shù)據(jù)分布不均勻或者代入?yún)?shù)值不均勻的情況下?,F(xiàn)在,我們就來探討下如何解決這類問題。

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

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

exec Nosniff1 50000;

exec Nosniff1 75124;

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

2. 使用本地變量

create procedure Nosniff2(@i int) as 
declare @iin int;
set @iin=@i
SELECT count(b.SalesOrderID),sum(p.weight) from 
[Sales].[SalesOrderHeader] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID =@iin;
go

exec Nosniff2 50000;

exec Nosniff2 75124;

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

3. 使用Query Hint,指定執(zhí)行計劃

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

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

相關(guān)文章

最新評論

白银市| 瑞昌市| 滦平县| 淅川县| 澄江县| 同心县| 桂平市| 云阳县| 乳山市| 高碑店市| 京山县| 青阳县| 勃利县| 屯留县| 彭阳县| 泗洪县| 英超| 合阳县| 四会市| 怀宁县| 天水市| 荥经县| 仁布县| 杭锦旗| 大悟县| 贵德县| 武平县| 攀枝花市| 宣化县| 贵溪市| 湖南省| 永德县| 柳林县| 卫辉市| 会同县| 伽师县| 贺兰县| 邳州市| 朔州市| 阳东县| 大渡口区|