执行计划概述
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
若要能够执行查询,SQL Server 数据库引擎必须分析语句,以确定访问和处理所需数据的有效方式。 由名为查询优化器的组件来处理此分析。 查询优化器的输入包括查询、数据库方案(表和索引的定义)以及数据库统计信息。 查询优化器会生成一个或多个查询执行计划,有时也称为查询计划或执行计划。 查询优化器使用一组启发式方法来选择查询计划,以平衡编译时间和计划优化,从而查找良好的查询计划。
提示
有关查询处理和查询执行计划的更多信息,请参阅“查询处理体系结构指南”的优化 SELECT 语句和执行计划缓存和重用部分。
有关在 SQL Server Management Studio 和 Azure Data Studio 中查看执行计划的信息,请参阅显示和保存执行计划。
查询执行计划定义:
访问源表的顺序。
数据库服务器一般可以按许多不同的序列访问基表以生成结果集。 例如,如果
SELECT
语句引用三个表,数据库服务器可以先访问TableA
,使用TableA
中的数据从TableB
中提取匹配的行,然后使用TableB
中的数据从TableC
中提取数据。 数据库服务器访问表的其他顺序包括:
TableC
、TableB
、TableA
或
TableB
、TableA
、TableC
或
TableB
、TableC
、TableA
或
TableC
、TableA
、TableB
用于从每个表提取数据的方法。
访问每个表中的数据一般也有不同的方法。 如果只需要有特定键值的几行,数据库服务器可以使用索引。 如果需要表中的所有行,数据库服务器则可以忽略索引并执行表扫描。 如果需要表中的所有行,而有一个索引的键列在
ORDER BY
中,则执行索引扫描而非表扫描可能会保存一个单独的结果集。 如果表较小,则对该表的几乎所有访问来说,表扫描可能都是最有效的方法。用于计算的方法,以及如何对每个表中的数据进行筛选、聚合和排序的方法。
从表访问数据时,可以使用不同的方法对数据进行计算,例如,计算标量值,以及对查询文本中定义的数据进行聚合和排序(例如,使用
GROUP BY
或ORDER BY
子句时),以及如何筛选数据(例如在使用WHERE
或HAVING
子句时)。