您真的在使用这种已弃用的 1980 年代连接语法吗?你不应该。使用正确的显式连接(INNER JOIN
在您的情况下)。
您将在其 ID 上加入两个表 C 和 D。这应该意味着它们是 1:1 相关的。如果不是,“ID”是用词不当,因为 ID 应该标识一行。
现在让我们看看访问路径:您有来自表 B 的 ID 和来自表 B 和 C 的名称。我们可以从列名中看出 b.id 是唯一的,如果数据库是正确设置。
这意味着 DBMS 将查找 ID 为 1 的 B 行,立即在索引中找到它,立即在表中找到该行,查看名称并查看它是否与“Ann”匹配。
因此,唯一可能会变慢的是加入 C、D 和 E。加入唯一 ID 非常快。如果您在名称上提供索引,则加入(非唯一?)名称只会很快。我会相应地推荐以下索引:
create index idx_c on c (name);
create index idx_e on e (name);
为了更快地做到这一点,请改用覆盖索引:
create index idx_b on b (id, name);
create index idx_c on c (name, id, age);
create index idx_d on d (id, name);
create index idx_e on e (name, town);