2016-12-15 24 views
0

SQL Server 2012SQL Server功能超時 - 儘管函數內部的select語句運行1秒

任何人都可以在這種情況下闡明一些情況嗎?

我有一個函數調用一個非常複雜的選擇語句。它接受3個參數

Select * 
from Myfunction(@CompanyId, @DivisionId, @PersonId) 

10分鐘後超時。

如果我把該函數的內部SQL聲明爲相同的變量,將它們設置爲相同的值並運行,則需要一秒鐘才能返回8條記錄。

如果我用@CompanyId運行函數不返回結果,我沒有按預期返回行並立即返回(所以這不是權限問題)。

我們剛剛插入了很多數據來處理這個函數,但是這並不能解釋爲什麼select會起作用並且函數掛起?

任何想法?

+1

這是一個表值函數,它有一堆語句嗎?這被稱爲多語句表值函數,幾乎總是比標量函數慢。你能分享功能代碼嗎?沒有它,我們能做的最好就是猜測。 –

+1

當你說它超時時,你究竟是什麼意思? SQL只會讓它永遠運行。你運行這個程序檢查sp_who2是否有阻塞? –

+2

基於性能的問題,你必須分享代碼先生。 –

回答

0

感謝您的回覆。這是一個索引問題。

我發現在函數的其中一列(用於其中一個連接)上添加非聚集索引解決了此問題。仍然不確定爲什麼這個工作在一個獨立的選擇語句,但有一個問題內的功能...但索引已經解決了它。

謝謝