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 次 |
| 最近记录: |