我有這樣的SQL查詢的SQL查詢的性能:與是否存在
IF NOT EXISTS (SELECT TOP 1 RowId
FROM dbo.Cache AS C
WHERE StringSearched = @pcpnpi
AND colName = 'pcpnpi'
AND ModifiedAt > (SELECT ModifiedAt
FROM dbo.Patients AS p
WHERE P.RowID = C.RowID))
BEGIN
SELECT @constVal = FunctionWeight
FROM dbo.FunctionWeights
WHERE FunctionWeights.FunctionId = 33;
INSERT INTO #Temp2
(RowNumber,ValFromUser,ColumnName,ValFromFunc,
FuncWeight,percentage)
SELECT RowNumber,@pcpnpi,'pcpnpi',PercentMatch,
@constVal,PercentMatch * @constVal
FROM dbo.Matchpcpnpi (@pcpnpi);
END
ELSE
BEGIN
INSERT INTO #Temp2
(RowNumber,ValFromUser,ColumnName,Percentage)
SELECT RowId,StringSearched,ColName,PercentMatch
FROM dbo.Cache AS C
WHERE StringSearched = @pcpnpi
AND colName = 'pcpnpi'
AND ModifiedAt > (SELECT ModifiedAt
FROM dbo.Patients AS p
WHERE P.RowID = C.RowID)
END
以上if語句是爲了避免已經被之前搜索和MatchPercent
已計算出的字符串不必要的外觀窗口。在這種情況下,它直接從緩存表中檢索。
上面的sql查詢基本上是針對一個特定的列,並且該查詢只有columnName,並且其值會隨着該過程中的許多其他列而重複更改。
if Exists
檢查顯然意味着查詢性能可以提高,但是性能下降可能是由於額外的檢查。 緩存表實際上是爲了提高性能,額外的檢查已經毀了它。 請問有沒有辦法簡化上述查詢?任何方向相同將有所幫助。 感謝
順便說一句:可怕的語法。 – reporter 2015-03-03 13:19:56
您是否考慮過在數據被修改時從緩存中刪除行?這會減少你現在要檢查時間字段的I/O。此外,對於過去24小時內的同一事件,這似乎至少是第3個問題,也許您可以更新原始問題... – 2015-03-03 13:22:02