我有一個存儲過程,它依次調用35個Inline table valued functions
(TVF)。T-SQL中的並行處理
所有這些內聯TVF都會返回dbo.Match函數的計算結果表。
這裏的問題是,儘管所有適當的索引都已到位,但只有當較早的一個完成其結果時纔會調用下一個Inline TVF,因此需要相當長的時間。我想要一種方式來並行執行這些操作,以便不必等待其他操作完成,也可以將它們轉換爲適合性能和並行處理的程序或任何其他信封。
由於dbo.Match
功能是通用於所有計算和基於來自在線TVF聲明傳遞的參數結果,我相信,如果在sql
過的threads
概念將被同步。 那麼,是否有任何可用的解決方法來減少執行時間?
我已經附加了一些一段代碼給的,我說的是什麼清晰的概念:
if @firstname is not null
begin
SELECT @constVal = FunctionWeight
FROM dbo.FunctionWeights WHERE FunctionWeights.FunctionId = 1;
INSERT INTO #Temp2
(RowNumber,ValFromUser,ColumnName,ValFromFunc,FuncWeight,percentage)
SELECT RowNumber,@firstname,'firstname',PercentMatch,@constVal,PercentMatch * @constVal FROM dbo.MatchFirstName(@firstname, @checkbool)
END
if @Middlename is not null
BEGIN
SELECT @constVal = FunctionWeight FROM dbo.FunctionWeights
WHERE FunctionWeights.FunctionId = 2;
INSERT INTO #Temp2 (RowNumber,ValFromUser,ColumnName,ValFromFunc,FuncWeight,percentage)
SELECT RowNumber, @MiddleName,'Middlename',PercentMatch, @constVal,PercentMatch * @constVal
FROM dbo.MatchMiddleName(@MiddleName, @checkbool)
END
在sql中,你指定了你想要的結果,而不是應該如何獲取結果。如果你想讓事情並行發生,你需要停止使用過程邏輯(多語句,IF,WHILE等),並根據集合(即單個查詢)進行編寫。如果SQLServer確定它是實現它的最佳方法,它將並行運行它。 – adrianm 2015-03-19 07:22:02