Я пытаюсь повысить производительность запроса, выполнение которого занимает много времени, и буду признателен за любые указания на то, что мне нужно сделать по-другому, чтобы довести производительность до разумного.(Информация об индексе и приблизительном плане выполнения приведена ниже.)
В обновляемой таблице table1 содержится менее 1000 записей, но в запрашиваемой таблице есть что-то в диапазоне 100 миллионов.Странно, что я использую почти один и тот же запрос для самых старых и самых последних значений, но запрос для самого последнего значения возвращается через две секунды.Это запрос для самого старого значения;для запуска требуется более двух минут:
UPDATE table1
SET firstVal = (
SELECT TOP 1 val
FROM table2
WHERE table1.ID = ID
AND valID = 123
ORDER BY entryDate
)
Запрос самой последней, возвращается через две секунды:
UPDATE table1
SET lastVal = (
SELECT TOP 1 val
FROM table2
WHERE table1.ID = ID
AND valID = 123
ORDER BY entryDate DESC
)
Индекс:
CREATE NONCLUSTERED INDEX [table2_IX9] ON [dbo].[table2]
(
[valID] ASC,
[entryDate] ASC,
[ID] ASC
)
INCLUDE ( [val]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [AB]
GO
Поиск по индексу(NonClustered) Стоимость: 68%
Максимальная стоимость: 29%
Можно ли сформулировать этот запрос лучше для оптимизации?Есть ли что-то, что мне нужно по-другому на стороне индекса?Заранее спасибо за любое руководство!