2012-12-10 59 views
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中指定不同的连接,只关于一般的连接。此外,我没有被告知任何表格都被索引,但我被告知我可以索引来做索引加入。我还给出了启发式查询树的统计数据,我用它来构造树的结构。

+1

我不完全明白你的问题。你只是想了解不同的连接方法,或者你想学习如何强制给定的SQL引擎使用更好/更有效的连接方法,或者你是否必须编写自己的查询引擎?顺便说一句,你应该将可用的索引添加到模式中,因为它对最终结果影响很大。或者也许我是一架直升机。 – biziclop

+0

MSDN是这个信息的好资源。 http://technet.microsoft.com/en-us/library/ms191426(v=sql.105).aspx – Zeph

+0

您可以通过使用适当的连接语法开始学习连接,而不是隐式连接,条件为'where'条款。 –

回答

1

msdn是一个很好的资料,这个信息。 technet.microsoft.com/en-us/library/ms191426(v=sql.105).aspx

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

3

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

仅当您的查询异常缓慢或已被识别为应用程序瓶颈会影响执行计划。

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

+1

它也取决于硬件(处理器和内存配置的数量)以及有关数据的信息。 –