执行计划概述

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

若要能够执行查询,SQL Server 数据库引擎必须分析语句,以确定访问和处理所需数据的有效方式。 由名为查询优化器的组件来处理此分析。 查询优化器的输入包括查询、数据库方案(表和索引的定义)以及数据库统计信息。 查询优化器会生成一个或多个查询执行计划,有时也称为查询计划执行计划。 查询优化器使用一组启发式方法来选择查询计划,以平衡编译时间和计划优化,从而查找良好的查询计划。

提示

有关查询处理和查询执行计划的更多信息,请参阅“查询处理体系结构指南”的优化 SELECT 语句执行计划缓存和重用部分。

有关在 SQL Server Management Studio 和 Azure Data Studio 中查看执行计划的信息,请参阅显示和保存执行计划

查询执行计划定义:

  • 访问源表的顺序。

    数据库服务器一般可以按许多不同的序列访问基表以生成结果集。 例如,如果 SELECT 语句引用三个表,数据库服务器可以先访问 TableA,使用 TableA 中的数据从 TableB 中提取匹配的行,然后使用 TableB 中的数据从 TableC 中提取数据。 数据库服务器访问表的其他顺序包括:
    TableCTableBTableA
    TableBTableATableC
    TableBTableCTableA
    TableCTableATableB

  • 用于从每个表提取数据的方法。

    访问每个表中的数据一般也有不同的方法。 如果只需要有特定键值的几行,数据库服务器可以使用索引。 如果需要表中的所有行,数据库服务器则可以忽略索引并执行表扫描。 如果需要表中的所有行,而有一个索引的键列在 ORDER BY 中,则执行索引扫描而非表扫描可能会保存一个单独的结果集。 如果表较小,则对该表的几乎所有访问来说,表扫描可能都是最有效的方法。

  • 用于计算的方法,以及如何对每个表中的数据进行筛选、聚合和排序的方法。

    从表访问数据时,可以使用不同的方法对数据进行计算,例如,计算标量值,以及对查询文本中定义的数据进行聚合和排序(例如,使用 GROUP BYORDER BY 子句时),以及如何筛选数据(例如在使用 WHEREHAVING 子句时)。