译者前言:上篇我们了解了查询计划的基本知识,本章我们继续深入探究查询计划,分析其常见的几种操作。
如果两个数据行处理流能够并行进行,在图形化的显示上,它们会出现在对方的上下位置。箭头的宽度代表着在各个流中有多少行数据正在被处理。
举个例子,如下的join查询,扩展了之前的查询以包含销售信息:
SELECT C.LastName, C.FirstName, C.MiddleName, C.Title , H.SalesOrderID, H.OrderDate FROM Person.Contact C JOIN Sales.SalesOrderHeader H ON H.ContactID = C.ContactID WHERE Suffix = 'Jr.' ORDER BY Title
其对应的查询计划如图3:
图3:一个关联查询的查询计划
快速的看下这个查询计划,它告诉了我们如下一些事情:
- 两张表同一时间进行扫描
- 大部分工作花费在扫描表上
- SalesOrderHeader 表查询出来的数据行比Contact 表要多
- 两张表没有聚集成一致的顺序,因此将各个SalesOrderHeader 行与它对应的Contact 行匹配起来需要额外的努力,在本例中,使用了一个哈希匹配操作(后面会讲解哈希的更多内容)。
- 用来排序所选数据行的努力可以忽略不计