【问题标题】:Materialized view or CDC?物化视图还是 CDC?
【发布时间】: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

那么就性能而言,哪一种是最好的方法。

  1. 在两个表上使用变更数据捕获并识别变更和 将它们应用于新表 'TbSalesAge'
  2. 使用物化视图而不是物理表
  3. 其他一些方法(请解释...)

PS:我不需要实时副本

【问题讨论】:

  • 当前规范化形式有什么问题?
  • 鉴于呈现的视图定义,SELECT 应该立即返回。如果没有,您肯定需要查看您的索引。 CustomerID, ID, AmountID, Name, Age 上的覆盖索引应该会带你走很长的路。
  • +1 表示 Lieven 的评论,ID 上的索引应该可以完成这项工作

标签: sql performance sql-server-2008 materialized-views change-data-capture


【解决方案1】:

恕我直言,我认为最好的方法是使用索引视图。您将需要使用 SCHEMABINDING 选项创建视图,并且对计算列、分组函数等有一些限制,但我认为这将为您提供单个合并对象,并通过您正在寻找的索引来提高性能。

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 2014-10-02
    • 2020-04-27
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2019-10-07
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多