我有这样的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