ric*_*ent 5 sql-server-2005 hierarchy
我有三个对象的“级别”数据库:A
,B
,和C
。表A
有大约 100000 行,B
有 500000,C
有 200 万。
出于愚蠢,我将数据库设计为使用连接表AB
和BC
,即使这些是 1:m 并且可以表示为ParentA
属性 inB
和ParentB
属性 in C
。我这样做是因为我当时认为这些可能是 m:m。
现在,我还有一个表D
,它与C
. 为了简化用户的数据管理,这是有道理的,让他们涉及D
到A
或B
而不是直接到每个C
。
所以,我已经连接表DA
,DB
以及DC
和加入视图DC2
,包括DC
以及继承的DC
关系,从加入的DA-AB-BC
和DB-BC
。我为此使用了 UNION ALL,并且有一些业务逻辑可以防止用户D
在两个级别分配相同的记录。
问题是,DC2
有点糟糕的表现。所有其他表都具有用于这些连接的适当覆盖索引,并且覆盖索引是聚集的。DC2 不包括表A
、B
、C
或D
,仅包括连接表。
还有表 E、F、G 和 H,它们在与 A、B 和 C 的关系方面与 D 相似。
我可以使用哪些策略来提高这些继承关系的性能?
已经想到:
DC2
索引视图不是因为UNION未在MSSQL索引视图允许的选项。我会以相反的方式查看您的索引视图:
为您的对象准备表 O,存储 A、B 和 C 以及一个级别字段。然后根据 O 的查询为 A、B 和 C 创建索引视图。也许可以使用 Hierarchyid 字段来了解每个记录的完整树。
您还有很多事情可以做,但这可能是一个有用的开始。
归档时间: |
|
查看次数: |
265 次 |
最近记录: |