Уже лучше, спасибо — секунд 8 против 1, но execution plan всё равно по сравнению с 1м запросом выглядит монстрообразно
SELECT UTC_Time, SC2
FROM Frames JOIN Science_data ON Frames.id = Science_data.id
WHERE UTC_time BETWEEN '2009-09-16 21:43:14' AND '2009-09-16 23:43:14' AND GoodToMap = 1
|--Nested Loops(Inner Join, OUTER REFERENCES:([Frames].[id]) WITH PREFETCH)
|--Filter(WHERE:([Frames].[GoodToMap]=1))
| |--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([LEND_FLIGHT].[dbo].[Frames]) WITH PREFETCH)
| |--Index Seek(OBJECT:([LEND_FLIGHT].[dbo].[Frames].[IX_UTC]), SEEK:([Frames].[UTC_time] >= 'Sep 16 2009 9:43PM' AND [Frames].[UTC_time] <= 'Sep 16 2009 11:43PM') ORDERED FORWARD)
|--Clustered Index Seek(OBJECT:([LEND_FLIGHT].[dbo].[Science_data].[PK_Science_data]), SEEK:([Science_data].[id]=[Frames].[id]) ORDERED FORWARD)
SELECT UTC_Time, SC2
FROM Frames
INNER LOOP JOIN Science_data
ON Frames.id = Science_data.id
WHERE UTC_time BETWEEN @curStart AND DATEADD(hour, 2, @curStart) AND GoodToMap = 1
|--Parallelism(Gather Streams)
|--Nested Loops(Inner Join, OUTER REFERENCES:([Frames].[id]) WITH PREFETCH)
|--Sort(ORDER BY:([Frames].[id] ASC))
| |--Hash Match(Inner Join, HASH:([Bmk1000])=([Bmk1000]), RESIDUAL:([Bmk1000]=[Bmk1000]))
| |--Bitmap(HASH:([Bmk1000]), DEFINE:([Bitmap1005]))
| | |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Bmk1000]))
| | |--Index Seek(OBJECT:([LEND_FLIGHT].[dbo].[Frames].[IX_UTC]), SEEK:([Frames].[UTC_time] >= [@curStart] AND [Frames].[UTC_time] <= dateadd(hour, 2, [@curStart])) ORDERED FORWARD)
| |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Bmk1000]), WHERE:(PROBE([Bitmap1005])=TRUE))
| |--Index Seek(OBJECT:([LEND_FLIGHT].[dbo].[Frames].[IX_GoodToMap]), SEEK:([Frames].[GoodToMap]=1) ORDERED FORWARD)
|--Clustered Index Seek(OBJECT:([LEND_FLIGHT].[dbo].[Science_data].[PK_Science_data]), SEEK:([Science_data].[id]=[Frames].[id]) ORDERED FORWARD)
Хотя это видимо уже я пошел читать rtfm про inner loop... Спасибо в любом случае