WEB开发网
开发学院数据库MSSQL Server 通往性能优化的天堂-地狱 JOIN方法说明 阅读

通往性能优化的天堂-地狱 JOIN方法说明

 2007-06-27 09:45:04 来源:WEB开发网   
核心提示: join操作有两个输入,上面例子中tableA是outer input,通往性能优化的天堂-地狱 JOIN方法说明(3),用于外层循环;tableB是inner input,用于循环内部,下面看一下非聚集索引的情况,加强对执行计划的理解、分析能力,下面针对执行计划描述一下SQL Serve

join操作有两个输入,上面例子中tableA是outer input,用于外层循环;tableB是inner input,用于循环内部。下面针对执行计划描述一下SQL Server完成这个操作的具体步骤。

1.3 查看执行计划方法  移到文章最前面。

1.4 执行步骤

下面是示例SQL的执行计划图。nested loop操作的右边,位于上面的是outer input,位于下面的是inner input。你不能够根据join中哪个表出现在前面来确定outer input和inner input关系,而必须从执行计划中来确定,因为SQL Server会自动选择哪个作为inner input。

a) 对tableA执行Table Scan操作。这个操作的输入是tableA表中的数据,这些数据位于磁盘上,操作过程中被加载到内存;输出是符合条件的记录集,将作为b)的outer input。在这个操作中,tableA.col1=?的条件会被使用。

b) 执行上面伪代码描述的nested loop操作。对a)中的每个输出记录,执行步骤c)。

c) 对tableB执行Clustered Index Seek操作。这个操作是在nested loop循环里面执行的,输入是tableB表的聚集索引数据。它使用tableB.col1=rowA.col1和tableB.col2=?这两个条件,从tableB的聚集索引中选择符合条件的结果。

d) 构造返回结果集。从nested loop的输出中,整理出select中指定的字段,构造最终输出结果集。

1.5 进阶说明

上面例子对inner input使用的是聚集索引,下面看一下非聚集索引的情况,加强对执行计划的理解、分析能力。

把tableB col1上的主键修改为非聚集方式,示例的SQL语句执行计划如下:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:通往 性能 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接