雨滴的博客
/
首页
/
个人首页
/
管理博客
/
个人相册
/
我的文章
/
登陆
/
首页
/
个人首页
/
控制面板
/
登陆
/
帮助
2006-09-11
SQL Server - [Join Type : Nested-Loop]
2006-09-11
SQL Server的join操作有三种类型:Nested-Loop Join, Merge Join, Hash Join。
Nested-Loop
Nested-Loop操作从关联的两个table中,选择一个作为外层循环,为每一条记录在另一个table中循环查找匹配的结果。作为外层循环的table为outer table,内层循环的table为inner table。
在执行计划中,不管是图形还是文本显示方式,outer table位于上方,inner table位于下方:
SQL Server在自动选择join type时,大多数情况下使用Nested-Loop join的条件是,关联的两个Talbe中,有一个数据量比较小(记录数在2000左右以下),另外一个数据量大的table有对于关联条件可用的索引。
另外一种情况,假如查询语句类似如下:
SELECT [...] FROM A INNER JOIN B ON A.?=B.? WHERE A.?=?
如果A、B的记录数都是几万几十万,B中有ON A.?=B.?可用的索引,A中有WHERE A.?=?可用的索引,并且A通过WHERE子句条件的过滤后记录数比较小(2000左右以下),这种情况下仍然会使用Nested-Loop join。但是如果WHERE子句中既包含A也包含B的限制条件,则会选择Merge或Hash join了。详细的了解SQL Server对SQL对执行过程,就可以清楚上面这种情况的原因了。
从Nested-Loop join的选择条件可以看出,Nested-Loop join的执行非常高效。outer table的记录数很小,因此外层循环次数少;在inner table中搜索匹配记录时使用索引,就算inner table的数据量非常大,搜索也是相当快而有效的。
在查询语句中,可以强制SQL Server使用Nested-Loop方式关联两个table,例如:
SELECT A.PONO,B.VCODE,B.VNAME FROM TBLPO A INNER JOIN TBLVENDOR B ON A.VENDORID=B.ID OPTION (LOOP JOIN)
如果没有十分的把握,让SQL Server Optimizer自动选择join type。
Optimizer总是尝试合理的确定inner talbe和outer table。通常情况下总是选择有可用索引的一个作为inner table,即使这个table的数据量可能会比另外一个多。如果两个table都没有可用索引,则选择数据量较小的一个作为outer table。这种情况下,如果数据量大的table记录数太多或内存有限,无法将inner table的数据全部读入内存中,则SQL Server会尝试将数据量小的作为inner table,以使inner table的数据全部驻留内存中,提高inner table循环的速度。
在进行Nested-Loop join操作时,SQL Server Optimizer可能会对inner table进行一次排序,以提高对inner table搜索的速度。
Reference:
MSDN - Understanding Nested Loops Joins
SQL Server Join Nastiness Tamed: Finding Joy In The INNER LOOP
Randy Dyess - Optimizer Join Methods
yudi500
发表于 >
2006-09-11 14:29:48
[评论 1] [浏览
0
]
文章评论
以下网友留言只代表其个人观点,不代表求学网的观点或立场
[匿名]
2008-6-10 20:25:13
[URL=http://www.estatico.cn/moto-occasioni]motooccasioni[/URL]motooccasioni[URL=http://www.estatico.cn/file-extension-class]fileextensionclass[/URL]fileextensionclass[URL=http://www.estatico.cn/corona-stufe]coronastufe[/URL]coronastufe
页1/1 每页10条共1条
首页
1
末页
雨滴的博客
公告
这个家伙很懒,什么也没留下。
文章
全部
[31]
默认分类
[0]
Software Development
[20]
SAP
[7]
Ajax
[4]
相册
全部
[0]
友情链接