0

我有一个观点,我正在使用将一些相关表格组织成一组更易于管理的统计列(例如购买/佣金信息)。

我现在已经在视图上对所有计算进行了排序,但是由于有许多计算列和大量数据(近 100 万条记录),视图很难表现良好。

例如,在不修改的情况下访问视图会返回结果,但简单地对从该视图中选择的一列执行 count(*) 需要很长时间。

我的想法是获取视图的数据并将其呈现为基于视图列建模的“真实”统计表。

我的问题是,如何将视图中的列直接插入或更新到这个新表中?

如果条目与 PK 不匹配,我需要能够插入到新表中,如果匹配,则更新现有行,因为视图数据可能会由于影响其列值的进程而更改,即:有人取消订单所以将进行退款,然后视图将显示统计信息,因为现在有更多退款,然后我需要在我的存储表中进行更新。

此外,由于代码复杂性和时间限制,我无法在操作时执行此操作,因此它会定期调用。

我希望这是有道理的。

4

1 回答 1

1

据我了解,您是最好的选择,考虑到 Sql Server 2008 是使用合并命令 http://technet.microsoft.com/en-us/library/bb510625.aspx

您可以在其中编写如下内容:

MERGE INTO Sales.SalesReason AS Target
USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
       AS Source (NewName, NewReasonType)
ON Target.Name = Source.NewName
WHEN MATCHED THEN
    UPDATE SET ReasonType = Source.NewReasonType
WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)

顺便说一句,如果您有良好的数据库结构和维护,100 万条记录应该不是问题。检查您的索引、统计数据和直方图,看看它们是否仍然有效。还要运行 tunning advisor 以查看您的索引是否良好。

于 2013-07-05T13:56:35.427 回答