我正在设计一个包含两个父子关系表的模式。我关注的一个问题是,将根据父记录中的两个字段中的值重复查询子记录。用例涉及选择子记录,其中父记录中的字段等于1而另一个字段大于零。 对于此用例,父记录不需要任何信息。
一个月的数据工作包含~500,000个父记录和~1,500,000个子记录。有问题的用例可能会返回99%的儿童记录。
有没有办法在子表上设置基于父表的critera字段的索引?我已经考虑过一些规范化,并在子记录中添加了几个标准字段,但我很愿意这样做。
答案 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,则可以针对表写入查询,但仍然使用您在此处创建的索引。