У меня есть этот 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
выше, если заявление предназначается, чтобы избежать ненужных выглядеть окна для строк, которые уже искали раньше и MatchPercent
был рассчитан. В этом случае он непосредственно извлекается из таблицы Cache.
Выше sql-запрос в основном для одного конкретного столбца, и этот же запрос с единственным именем columnName и его изменение значения повторяется для многих других столбцов в процедуре.
Очевидно, что проверка if Exists
означала, что производительность запросов может улучшиться, однако производительность снизилась, вероятно, из-за дополнительных проверок. Таблица кеша, которая на самом деле предназначена для повышения производительности, дополнительные проверки испортили ее. Есть ли способ упростить вышеуказанный запрос, пожалуйста? Любые указания на том же помогут. Благодаря
Кстати: ужасный синтаксис. – reporter
Вы считали удаление строк из кеша при изменении данных? Это уменьшит ввод-вывод, который вы будете выполнять для проверки полей времени. Также это, по-видимому, по крайней мере третий вопрос для того же самого в течение последних 24 часов, возможно, вы могли бы обновить исходный вопрос ... –