jak skonstruować indeks dla grupy według w Sql Server

Wykonanie następującego prostego zapytania zajmuje bardzo dużo czasu (kilka minut).

Mam indeks:

create index IX on [fctWMAUA] (SourceSystemKey, AsAtDateKey)
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey in (1,2,3,4,5,6,7,8,9)
GROUP BY [t0].[SourceSystemKey]

Statystyki są następujące:

logiczne odczyty 1827978odczyty fizyczne 1113czytaj dalej 1806459

Wykonanie tego samego zapytania i ponowne sformatowanie go w następujący sposób daje mi następujące statystyki:

odczyty logiczne 36odczyty fizyczne 0czytaj dalej 0

Wykonanie zajmuje 31ms.

SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
 FROM [fctWMAUA] (NOLOCK) AS [t0]
 WHERE SourceSystemKey = 1
 GROUP BY [t0].[SourceSystemKey]
UNION
 SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
 FROM [fctWMAUA] (NOLOCK) AS [t0]
 WHERE SourceSystemKey = 2
 GROUP BY [t0].[SourceSystemKey]
UNION
 SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
 FROM [fctWMAUA] (NOLOCK) AS [t0]
 WHERE SourceSystemKey = 3
 GROUP BY [t0].[SourceSystemKey]
/* AND SO ON TO 9 */

Jak mogę szybko utworzyć indeks?

questionAnswers(6)

yourAnswerToTheQuestion