發生過這樣一件事, 寫了乙個sql,查詢資料大概5秒,但是放到儲存過程裡面去了過後,查了5分鐘也沒給出結果,後來網上找解決方案,終於找到乙個解決方案。
在儲存過程的引數那裡對引數進行乙個傳遞。反正他們說的引數嗅探是這個意思。這是儲存過程的機制。具體是什麼,大家去網上搜尋下。
alterprocedure
seluserrecordgamescoreinfobykindid
@vartime1
datetime
,@vartime2
datetime
,@varkindid
int,
@vartype
intas begin
declare
@time1
datetime
,@time2
datetime
,@kindid
int,
@type
intset
@time1
=@vartime1
set@time2
=@vartime2
set@kindid
=@varkindid
set@type
=@vartype
這樣能解決了。
引用別人的一句話:
其實簡單來講,引數嗅探我的很通俗的解釋就是:sqlserver用鼻子嗅不到具體引數是多少
所以他不能選擇最合適的執行計畫去執行你的查詢,所以引數嗅探是乙個不好的現象。
sql儲存過程比sql語句執行慢很多
引數嗅探的問題 原因 1 可能是發生了引數嗅探,第一次賦給儲存過程的輸入引數,會為該儲存過程生成乙個基於輸入引數的執行計畫,因此如果第一次輸入的引數不具有代表性 例如大部分查詢輸入的引數都是a值,但第一次執行儲存過程時輸入的是b值 就有可能比即席查詢慢,儘管即席查詢需要重新編譯執行計畫,但選擇了更有...
SQL查詢語句執行速度快,儲存過程執行慢
今天乙個生成10w條資料的儲存過程執行了95s,但是單獨執行sql語句只需要28s,查資料後發現原來這是儲存過程的機制導致的,也就是傳說中的引數嗅探 網上的一段話 1 可能是發生了引數嗅探,第一次賦給儲存過程的輸入引數,會為該儲存過程生成乙個基於輸入引數的執行計畫,因此如果第一次輸入的引數不具有代表...
SQL 遠端執行儲存過程
1 首先是執行遠端連線 exec sp addlinkedserver 連線名字 sqloledb 遠端資料庫ip exec sp addlinkedsrvlogin 連線名字 false null,遠端資料庫帳號 遠端資料庫密碼 說明 連線名字可以自己隨便起,主要連線名字是用在後面的呼叫,下面有介...