Я пытаюсь улучшить производительность своих представлений с помощью индексированных представлений, однако я не уверен, смогу ли я преодолеть ограничения.
На мой взгляд, я пытаюсь выбрать последние записи для определенной группы. Я могу написать такой запрос либо с помощью внутреннего выбора, либо с использованием общего табличного выражения с row_number() OVER..PARTITION BY.
Однако оба этих подхода не позволяют создать индекс для представления. Есть ли другой способ написать представление, чтобы я мог создать для него индекс?
SELECT [Person ID], [Updated DateTime], Email
FROM dbo.[People Information History] AS [People Information]
WHERE ([People Information].[Updated DateTime] =
(SELECT MAX([Updated DateTime]) AS Expr1
FROM dbo.[People Information History]
WHERE ([People Information].[Person ID] = [Person ID])))
or
WITH [Current Information]
AS
(
SELECT [Person ID], [Updated DateTime], Email,
row_number() OVER (PARTITION BY [Updated DateTime] ORDER BY [Updated DateTime] DESC) as RowNum
FROM dbo.[People Information History]
)
SELECT [Person ID], [Updated DateTime], Email
FROM [Current Information]
WHERE RowNum = 1