CTE階層の最適化
以下を更新 アカウントの階層を表す一般的なアカウント/親アカウントアーキテクチャのアカウントのテーブルがあります(SQL Server 2012)。CTEを使用してVIEWを作成し、階層をハッシュしました。全体として、意図したとおりに美しく機能します。任意のレベルで階層を照会し、ブランチを簡単に確認できます。 階層の関数として返される必要があるビジネスロジックフィールドが1つあります。各アカウントレコードのフィールドは、ビジネスのサイズを記述します(CustomerCountと呼びます)。レポートする必要があるロジックは、ブランチ全体からCustomerCountをロールアップする必要があります。つまり、アカウントが与えられた場合、そのアカウントのcustomercount値と、階層に沿ったアカウントの下のすべてのブランチのすべての子を合計する必要があります。 acct4.acct3.acct2.acct1のように見えるCTE内に構築された階層フィールドを使用して、フィールドを正常に計算しました。私が直面している問題は、単純に高速化することです。この1つの計算フィールドがないと、クエリは約3秒で実行されます。計算フィールドに追加すると、4分のクエリになります。 これが正しい結果を返す、私が思いつくことができた最高のバージョンです。パフォーマンスをそれほど犠牲にすることなく、このAS A VIEWをどのように再構築できるかについてのアイデアを探しています。 私はこれが遅くなる理由を理解しています(where句で述語を計算する必要があります)が、それを構造化して同じ結果を得る別の方法を考えることはできません。 以下に、テーブルを構築し、CTEを私の環境で動作するように正確に実行するためのサンプルコードを示します。 Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) NOT NULL , Name varchar(30) NULL , ParentId varchar(1) NULL , CustomerCount int NULL ); INSERT Account SELECT 'A','Best Bet',NULL,21 UNION ALL SELECT 'B','eStore','A',30 UNION ALL SELECT 'C','Big Bens','B',75 UNION …