欢迎投稿

今日深度:

参数化查询速度慢

参数化查询速度慢


这是问题原型:

 --SQL1
 declare @OrderDetailID nvarchar(50)
 set @OrderDetailID='R1502003963580C001'
 select * from BillDetail where OrderDetailID=@OrderDetailID 
 --SQL2
 select * from BillDetail where OrderDetailID='R1502003963580C001' 
 

PS:另外在每次使用SqlParameter时,如果是字符类型的,都尽量加上size,涉及到执行计划缓存的问题

例如:new SqlParameter("@name", SqlDbType.Varchar, 40) { Value = name };

反正还是不能下班。。。

我又查了一下:好像微软官方也出现过这样的问题

给出的解决方案是这样的:The only resolution to this problem is to use a stored querydef query instead of prepared queries.

也许可以这么理解(用存储过程的形式):

将上面的参数化改为这样: exec('select * from BillDetail where OrderDetailID='''+@OrderDetailID+'''')

暂且就这样吧!主要是现在不能重现,无法验证,如果遇到了,这样先试一下咯

是由于定义的字符串类型不匹配造成的

declare @OrderDetailID varchar(50) --从nvarchar变为varchar

着急查出问题的朋友直接看下面就好了。。。

总结一下:

执行速度较慢的这句执行计划如下:

declare @OrderDetailID nvarchar(50)
set @OrderDetailID='R1502003963580C001'
select * from BillDetail where OrderDetailID=@OrderDetailID \

解决办法有两种:

1.使用执行存储过程的方式

declare @OrderDetailID1 nvarchar(20)
set @OrderDetailID1='R1502003963580C001'
exec('select * from BillDetail where OrderDetailID='''+@OrderDetailID1+'''')

\

2.定义正确的参数类型

declare @OrderDetailID2varchar(20)
set @OrderDetailID1='R1502003963580C001'
select * from BillDetail where OrderDetailID=@OrderDetailID2

\

www.htsjk.Com true http://www.htsjk.com/DB2/20307.html NewsArticle 参数化查询速度慢 这是问题原型: --SQL1 declare @OrderDetailID nvarchar(50) set @OrderDetailID=R1502003963580C001 select * from BillDetail where OrderDetailID=@OrderDetailID --SQL2 select * from BillDetail where OrderDetailID=...
评论暂时关闭