查询优化 - 连接算法

时间:2012-12-10 19:39:59

标签: sql query-optimization

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

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,Budget,Location,MGRSSN),
  Works_On(ESSN,PNum - 项目编号),
  项目(PNum,PName,预算,位置,目标)。

我画了一个左深的连接树,我不知道每个连接使用哪种算法。 如果我能够解释何时使用每种算法或指向解释它的资源的指针,那将非常有用。

编辑:我不是在询问如何在sql中指定不同的连接,只是关于通常的连接。此外,我没有被告知任何表被索引,但我被告知我可以索引只是为了进行索引连接。我还获得了统计信息,以启发式方式创建查询树,我用它来构建树的结构。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

  

msdn是这个信息的好资源。 technet.microsoft.com/en-us/library/ms191426(V = SQL.105)的.aspx

正是我所需要的。谢谢,Zeph!