3

我无法理解不同的连接算法(嵌套循环连接、合并连接、索引连接、哈希连接和其他变体)以及如何/何时使用它们。更具体地说,我被要求绘制一个查询树以最有效地执行以下查询:

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 中指定不同的连接,只是关于一般的连接。此外,我没有被告知任何表都已编入索引,但我被告知我可以索引只是为了进行索引连接。我还获得了统计信息以启发式地制作查询树,我用它来制作树的结构。

4

2 回答 2

3

通常,您希望将其留给您的数据库系统来选择最佳查询执行计划,从而选择最佳连接算法。它取决于表的可用索引和统计数据(例如它们包含多少行以及一行包含多少不同的值)。此外,连接算法还取决于数据库系统特定的东西,例如实现了什么算法,数据是使用集群表还是索引组织表存储等。

只有当您的查询异常缓慢或已被确定为应用程序瓶颈时,您才会尝试影响执行计划。

根据可用信息,无法确定最佳执行计划。

于 2012-12-10T20:23:03.490 回答
1

msdn 是获取此信息的好资源。technet.microsoft.com/en-us/library/ms191426(v=sql.105).aspx

正是我所需要的。谢谢,泽夫!

于 2012-12-11T04:08:33.883 回答