【发布时间】:2011-01-16 23:07:08
【问题描述】:
我有两个表(使用 SQL 2008 存储)的视图,其中包含数百万条记录。
CREATE VIEW VwSalesAge
AS
SELECT
Transactions.ID
,Transactions.Amount
,Customer.ID
,Customer.Name
,Customer.Age
FROM Transactions
INNER JOIN Customer
ON Transactions.CustomerID=Customer.ID
现在我想使用一个物理表来存储这些信息,以避免扫描大表以进行更小的查询,例如
SELECT *
FROM VsSalesAge
WHERE Customer.ID = 123
那么就性能而言,哪一种是最好的方法。
- 在两个表上使用变更数据捕获并识别变更和 将它们应用于新表 'TbSalesAge'
- 使用物化视图而不是物理表
- 其他一些方法(请解释...)
PS:我不需要实时副本
【问题讨论】:
-
当前规范化形式有什么问题?
-
鉴于呈现的视图定义,
SELECT应该立即返回。如果没有,您肯定需要查看您的索引。CustomerID, ID, Amount和ID, Name, Age上的覆盖索引应该会带你走很长的路。 -
+1 表示 Lieven 的评论,ID 上的索引应该可以完成这项工作
标签: sql performance sql-server-2008 materialized-views change-data-capture