我有一個SQL腳本可以將大約8000行插入到TABLE變量中。爲什麼SQL Server Management Studio中的這個sql腳本太慢了?
插入該變量後,我使用WHILE循環遍歷該表並執行其他操作。該循環可能是60行代碼。
如果我運行TABLE變量插入部分腳本,沒有while循環,大約需要5秒。那很棒。
但是,如果我運行整個腳本,大約需要15分鐘。
這裏是很有趣,而且我想不通:
當我運行了整個劇本,我沒有看到任何報表打印,直到多分鐘到腳本。
然後,一旦它找出要做什麼(大概),它會將插入操作運行到表var,執行循環,並且所有操作都相當快。
然後,在循環結束時,或者甚至在循環結束後,它會持續多個分鐘並掛起。最後,它循環播放循環後面的腳本的最後幾行。
我可以解釋插入過程中所花費的所有時間,然後在循環中佔用所有時間。但我無法弄清楚爲什麼它會在腳本的前幾分鐘和結尾處掛起。
對於踢腿,我在插入到臨時表後添加了一條GO語句,並且所有一切都按照您的預期運行;然而,我不能這樣做,因爲我需要這個變量,而GO語句顯然會殺死那個變量。
我相信我會停止使用表變量,並與真正的表一起去,以便我可以發出GO,但我真的很想知道這裏發生了什麼。
想了解SQL Server在那段時間內要做什麼?
謝謝!
你能提供腳本嗎?如果不仔細觀察,它很難回答。 – 2010-11-05 21:53:49
我可以,但它是@ 17000行!我將編輯併發布相關位,儘管 – 2010-11-05 22:02:12
明白了......問題不在於插入或循環......它是循環之後的部分。我不知道爲什麼SQL服務器花了這麼長時間,但一旦我擺脫了(這是一個重大的「IN」聲明),一切都很順利。 – 2010-11-05 22:08:39