发布于 2018-03-22 20:28:55 | 44 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的SQL Server教程,程序狗速度看过来!

SQL Server 数据库

SQL Server 即 Microsoft SQL Server 。 SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。


这篇文章主要介绍了SQL Server Parameter Sniffing及其改进方法,需要的朋友可以参考下

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] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID [email protected];
go
DBCC FREEPROCCACHE
exec Sniff1 50000;
exec Sniff1 75124;
go

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] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID =''');
	        tanx_s = document.createElement("script");
	        tanx_s.type = "text/javascript";
	        tanx_s.charset = "utf-8";
	        tanx_s.id = "tanx-s-mm_10108296_617976_61714699";
	        tanx_s.async = true;
	        tanx_s.src = "http://p.tanx.com/ex?i=mm_10108296_617976_61714699";
	        tanx_h = document.getElementsByTagName("head")[0];
	        if(tanx_h)tanx_h.insertBefore(tanx_s,tanx_h.firstChild);
	
	
最新网友评论  共有(0)条评论 发布评论 返回顶部
月排行榜