使用Sql Server 2008,使用View来跟踪表计数是否合适。例如。
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个用户和约。 500.000个订单?
提前致谢, 安德斯
答案 0 :(得分: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
这样引擎会将计数保持最新,而不是每次查询视图时都计算它们。缺点是争用,您无法从不同的交易中为同一用户创建/删除订单。
答案 1 :(得分:0)
每次访问此视图时,此视图都将执行内联查询。所以我认为在视图上创建索引无济于事。主要的是在底层的2个表用户和订单上有适当的索引。