【发布时间】:2012-01-19 00:31:31
【问题描述】:
对于给定的时间点,资产具有有效价格。有些资产每周有一次新价格,有些则每天一次。最近的价格是“有效价格”。
存储所描述关系的时态表如下所示:
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的有效价格的查询是一些计算的瓶颈——它需要一个子查询,就像鲁本斯·法里亚斯在他的回答中写的那样。
标签: sql-server sql-server-2008 indexing temporal-database