我是一个运行 SQL SERVER 2005 的极端新手。我有两个表,我将它们放在一个视图中。第一个表只有 2 列进入视图。一列是 ID 号,另一列是名称。第二个表是所有数据所在的位置。该表中的列是 ID、日期、小时、价格类型、市场类型和价格。我的目标是有一个将 PriceType 过滤为固定值的视图,然后在 MarketType 为 DAM 时获取价格与 MarketType 为 RTM 的价格之间的差异。现在看起来像下面这样......
SELECT dbo.nodes.commonname,
dbo.nodes.node_id,
da.pricedate,
da.hour,
rt.price AS rtm,
da.price AS dam,
da.price - rt.price AS dart
FROM dbo.pnodes
INNER JOIN dbo.pnode_prices AS da
ON dbo.pnodes.node_id = da.pnode_id
INNER JOIN dbo.pnode_prices AS rt
ON dbo.pnodes.node_id = rt.pnode_id
AND da.pricetype = rt.pricetype
AND da.pricedate = rt.pricedate
AND da.hour = rt.hour
WHERE ( da.pricetype = 'LMP' )
AND ( da.markettype = 'DAM' )
AND ( rt.markettype = 'RTM' )
这种观点本身并不需要很长时间。有时我想更进一步,并在两个视图之间产生差异,我将在其中运行一个查询,加入上述视图并获取 Price 的差异where view1.CommonName=abc and view2.CommonName=xyz
。当我运行该查询时,运行时间是单独运行简单视图所需时间的 10 倍。我假设如果我以最佳方式做事,它不会花费 10 倍的时间。我可以做些什么来改善这一点?