我需要一些幫助來解釋SQL Server 2008中的這種行爲。我有一個簡單的C++程序在循環中運行查詢。這是程序的僞代碼。SQL Server查詢隨着時間的推移從0降低到60毫秒
myTempid = 0;
while (1) {
execQuery(select a.id
from a,b,c,d
where a.id = b.id
and b.id = c.id
and c.id = d.id
and id.id = myTempID)
}
這裏有一些事實
- A,B,C都是空表
- d具有約5500行
查詢開始時採取 '0msec'(我可以從分析器中看到這一點);但是在X次迭代之後;它跳到約60毫秒並停留在那裏。 X是變體;有時是100 ..有時是200.奇怪的是,一旦它從0跳到60毫秒,無論myID如何,它都會停留在那裏。
對我來說,聽起來像SQL Server是以某種方式'去緩存'的查詢計劃?這對任何人都有意義嗎
謝謝!
什麼是id.id? 你確定在execQuery例程中沒有內存或連接泄漏嗎? – Jacob 2010-08-01 02:50:51
您是在SQL服務器上還是在您的應用中計時執行?如果在你的應用程序中,這可能會打開連接或打開一個最大值。 – Bill 2010-08-01 03:50:30
可能是參數嗅探:http://www.sqlpointers.com/2006/11/parameter-sniffing-stored-procedures.html – 2010-08-01 03:59:33