我有三个对象的“级别”数据库: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 …