0

親子関係にある2つのテーブルを含むスキーマを設計しています。私が懸念しているクエリの1つは、親レコードの2つのフィールドの値に基づいて、子レコードが繰り返しクエリされることです。ユースケースでは、親レコードのフィールドが1に等しく、別のフィールドがゼロより大きい子レコードを選択します。このユースケースでは、親レコードからの情報は必要ありません。

1か月のデータ作業には、最大500,000の親レコードと最大1,500,000の子レコードが含まれます。問題のユースケースは、おそらく子レコードの99%を返します。

親テーブルの基準フィールドに基づいて子テーブルにインデックスを設定する方法はありますか?少し非正規化し、子レコードにいくつかの基準フィールドを追加することを検討しましたが、そうすることを躊躇しています。

4

1 に答える 1

1

このため、インデックス付きのビューで必要なものが得られるように思えます。

必要なcolumn=1チェックの親テーブルに結合している間は、子テーブルからのビューの表示に列のみを含めることができます。

ソリューションの大まかな例は次のようになります。

CREATE VIEW dbo.vwChildTableRestrictedByParentValues
WITH SCHEMABINDING
AS
   SELECT ct.col1, ct.col2, ct.etc
   FROM dbo.ChildTable AS ct
   INNER JOIN dbo.ParentTable AS pt ON ct.ParentId = pt.ParentId
   WHERE pt.OneField = 1
      AND pt.AnotherField > 0;

GO

CREATE CLUSTERED INDEX IX_vwChildTableRestrictedByParentValues
ON dbo.vwChildTableRestrictedByParentValues
(
   Col1 ASC
   , Col2 ASC
   , etc ASC
)

インデックスに、子テーブルのインデックスを作成する列が含まれている場合。

Enterprise Editionをお持ちでない場合は、ビューに対してクエリを作成する必要があります。Enterpriseを使用している場合は、テーブルに対してクエリを記述できますが、ここで作成したインデックスを引き続き使用します。

于 2012-09-18T21:24:31.717 に答える