Для данного момента времени актив имеет эффективную цену. Некоторые активы имеют новую цену один раз в неделю, причем один раз в день. Самая последняя цена - «эффективная цена».Как настроить производительность временной таблицы SQL Server
Временная таблица, которая хранит описанные отношения выглядит следующим образом:
CREATE TABLE dbo.AssetPrice
(
AssetId int NOT NULL -- FK to the table dbo.Asset
,EffectiveDate datetime NOT NULL
,Price decimal NOT NULL
CONSTRAINT PK_AssetPrice PRIMARY KEY CLUSTERED (AssetId,EffectiveDate,Price)
)
данные выглядит примерно так:
AssetId EffectiveDate Price
------- ------------- -----
1 2012-01-11 1.21
1 2012-01-12 1.22
2 2012-01-11 3.55
2 2012-01-12 3.60
3 2012-01-04 5.15
3 2012-01-11 5.14
Для запроса для эффективной цены на AssetId
проста, но для вычисления требуется нетривиальное количество времени.
Идеально хранить данные физически, так что только данные изменяются на dbo.AssetPrice
, что требует пересчета эффективной цены. Я считаю, что я не могу создать индексированное представление, потому что соответствующие агрегированные функции не допускаются в индексированном представлении.
Как настроить таблицу, чтобы получить эффективную цену (самую последнюю цену) очень быстро?
Какой запрос принимает «нетривиальное количество времени» для расчета цены? –
@ypercube Запрос, чтобы найти эффективную цену «AssetId», был шеей бутылки в нескольких вычислениях - для этого требовался подзапрос, подобный тому, который был написан Рубенсом Фариасом в его ответе. – Mike