У меня есть запрос, использующий Cross Apply. Мне нужно выполнить запрос для нескольких [Quote Id]. Вот мой исходный запрос:
SELECT distinct
[Reports].[Quote_Header_Details_vw].[Quote_Id]
,[Reports].[Quote_Header_Details_vw].[Quote_Created]
,[Reports].[Quote_Header_Details_vw].[Com_Product]
,[Reports].[Quote_Header_Details_vw].[Ene_Product]
,b.[Completed]
,b.[Description]
FROM [Reports].[Quote_Header_Details_vw]
CROSS APPLY (SELECT Top 1
Core.Job.[Completed]
,Core.Job.[Description]
FROM Core.Job
WHERE [Quote_Header_Details_vw].[Quote_Created]>=Core.Job.[Completed]
And Core.Job.[Description] like '%'+[Reports].[Quote_Header_Details_vw].[Ene_Product]
Order by Core.Job.[Completed] DESC) AS b
Я понимаю, что много времени тратится на выполнение операции Top 1 в операторе Cross Apply. В настоящее время выполнение запроса для одного идентификатора предложения занимает более 40 секунд, и по мере роста таблицы Core.Job запрос будет становиться все медленнее и медленнее. Поэтому для меня это неприемлемое решение.
Есть ли более быстрый и лучший способ сделать это? Большое спасибо. Обратите внимание, что между таблицами [Quote_Header_Details_vw] и [Core.Job] нет никакой связи, т.е. нельзя их объединить.
CROSS APPLY
- person Igor   schedule 18.03.2016