我无法理解不同的连接算法(嵌套循环连接、合并连接、索引连接、哈希连接和其他变体)以及如何/何时使用它们。更具体地说,我被要求绘制一个查询树以最有效地执行以下查询:
SELECT E.Name
FROM Employee E, Department D, Works_On W, Project P
WHERE E.DNO = D.DNO and E.SSN = W.ESSN and P.PNUM = W.PNUM and
P.Budget > 50 and E.Sex = 'M' and E.Hobby = 'Yodeling' and
D.DName = 'Rational Mechanics';
如果需要,我可以提供架构;基本上,这四个表是
员工(SSN、姓名、DNO - 部门编号、薪水、性别)、
部门(DNO、DName、预算、位置、MGRSSN)、
Works_On(ESSN、PNum - 项目编号)、
项目(PNum、PName、预算、位置、目标)。
我画了一个左深连接树,我不知道每个连接使用哪种算法。如果我能得到关于何时使用每种算法的解释或指向解释它的资源的指针,那将非常有帮助。
编辑:我不是在问如何在 sql 中指定不同的连接,只是关于一般的连接。此外,我没有被告知任何表都已编入索引,但我被告知我可以索引只是为了进行索引连接。我还获得了统计信息以启发式地制作查询树,我用它来制作树的结构。