根据父记录的标准对子记录进行索引?

时间:2012-09-18 20:17:05

标签: sql-server-2008 schema relational-database

我正在设计一个包含两个父子关系表的模式。我关注的一个问题是,将根据父记录中的两个字段中的值重复查询子记录。用例涉及选择子记录,其中父记录中的字段等于1而另一个字段大于零。 对于此用例,父记录不需要任何信息。

一个月的数据工作包含~500,000个父记录和~1,500,000个子记录。有问题的用例可能会返回99%的儿童记录。

有没有办法在子表上设置基于父表的critera字段的索引?我已经考虑过一些规范化,并在子记录中添加了几个标准字段,但我很愿意这样做。

1 个答案:

答案 0 :(得分:1)

为此,听起来像indexed view可以得到你想要的东西。

您只能在子表的视图显示中包含列,同时加入父表以进行所需的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,则可以针对表写入查询,但仍然使用您在此处创建的索引。