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 人のユーザーと約 10 万人のユーザーを抱える実行可能なソリューションですか。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つのテーブルUsersとOrdersに適切なインデックスを作成することです。

于 2012-08-03T09:54:59.317 に答える