0

使用 Sql Server 2008,是否适合使用视图来跟踪表计数。例如

CREATE VIEW [dbo].UserCounts    
    SELECT     O.UserId, Count(O.OrderId) AS OrderCount
    FROM       User U INNER JOIN Orders O ON U.UserId = O.UserId
    GROUP BY O.UserId

这是一个拥有 100.000 个用户和大约 100.000 个用户的可行解决方案吗?500.000 个订单?

提前致谢, 安德斯

4

2 回答 2

1

您可以创建索引视图,但必须COUNT_BIG改用:

CREATE VIEW dbo.UserCounts    
WITH SCHEMABINDING
AS
    SELECT     O.UserId, 
      COUNT_BIG(O.OrderId) AS OrderCount
    FROM       dbo.User U 
    INNER JOIN dbo.Orders O ON U.UserId = O.UserId
    GROUP BY O.UserId;
go

CREATE UNIQUE CLUSTERED INDEX cdxUserCounts on dbo.UserCounts(UserId);
go

这样引擎将保持计数最新,而不是每次查询视图时计数。缺点是争用,您不能从不同的交易中为同一用户创建/删除订单。

于 2012-08-03T09:52:28.600 回答
0

每次访问此视图时,此视图都会执行内联查询。因此,我认为仅在视图上创建索引无济于事。主要是在底层 2 个表用户和订单上有适当的索引。

于 2012-08-03T09:54:59.317 回答