程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 參數化查詢速度慢

參數化查詢速度慢

編輯:DB2教程

參數化查詢速度慢


這是問題原型:

 --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

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved