У меня есть запрос, который я пытаюсь оптимизировать, но не имел большого успеха. Существуют две таблицы: одна с основными данными и одна с отметками времени, когда произошли определенные события. Таблицы являются реляционными, используя общий ключ adID. Я пытаюсь выполнить запрос, который извлекает все временные метки и другие данные из основной таблицы. У меня это работает, но я пытаюсь оптимизировать, чтобы он работал быстрее.Как оптимизировать инструкцию SELECT с несколькими подзапросами
SELECT a.ID,a.repID,a.artistID,
(
SELECT TOP 1 c.timestamp
FROM Tracking AS c
WHERE statusID = 4
AND c.ID = a.ID
ORDER BY c.timestamp ASC
)
AS created,
(
SELECT TOP 1 d.timestamp
FROM Tracking AS d
WHERE statusID = 5
AND d.ID = a.ID
ORDER BY d.timestamp ASC
)
AS claimed,
(
SELECT TOP 1 p.timestamp
FROM Tracking AS p
WHERE statusID = 6
AND p.ID = a.ID
ORDER BY p.timestamp ASC
)
AS proof,
(
SELECT TOP 1 v.timestamp
FROM Tracking AS v
WHERE statusID = 8
AND v.ID = a.ID
ORDER BY v.timestamp ASC
)
AS approved,
(
SELECT count(ID)
FROM Tracking AS t
WHERE statusID = 6
AND t.ID = a.ID
)
AS proofcount
FROM Advertising AS a
WHERE a.statusID = 8
Любая помощь по этому поводу оценивается. Я не слишком хорошо знаком с SQL Server, поэтому я не слишком разбираюсь в оптимизации таких запросов.
Сколько строк делает возвращение запроса? Какие индексы у вас есть на 'Tracking'? –