我对SQL上的左连接有疑问:我想知道SQL服务器如何执行左连接?
假设我有两张桌子。
执行时:
select name, phone
from people
left join phone on people.id = phone.person_id
...我想知道SQL服务器如何处理查询字符串。
我的猜测是:
我说错了吗?
此外,我应该阅读哪些书籍来获取此类信息?
答案 0 :(得分:2)
发生了什么(至少在postgresql中,但可能是其他类似的)是查询规划器将采取您的查询并生成多个执行策略,然后它将根据它对表的知识对这些策略进行排名(通过统计数据),然后选择最佳执行策略并执行它。
在这里查看几个非常常见的策略:http://en.wikipedia.org/wiki/Join_%28SQL%29
基本上:
答案 1 :(得分:2)
对于所有联接,首先查询处理器查看正在连接的两个集,并根据这些表中的数据(由缓存的数据库统计信息表示),它组合两个表中的行,使用其中一个可用的合并技巧(Merge Join,Hash Join或nested Loops)。完成后,组合集在其中有一行,用于从一侧开始的行与从另一侧开始的行的每个组合,这满足连接条件。
然后,如果它是外连接,则连接的“内部”侧的所有行都不满足连接条件(“外部”侧没有匹配的记录)被添加回组合集,所有列的空值都来自外侧..
答案 2 :(得分:1)
在SQL Server Management Studio中执行查询,在“查询”菜单下,选择获取“实际执行计划”的选项。
执行查询后,执行计划将作为单独选项卡上的图表返回。它从左到右读取。该计划将向您展示幕后发生的事情。
在这里阅读更多内容
http://msdn.microsoft.com/en-us/library/aa178423%28SQL.80%29.aspx
http://www.simple-talk.com/sql/performance/execution-plan-basics/