常用执行计划操作符

一、数据访问操作符

1、SCAN操作符:扫描操作主要分为3种

Table Scan:当针对一个表(没有聚集索引、堆表)执行一个查询语句时,

此时将会做全表扫描操作(如果有where子句,则先执行全表扫描操作,然后在针对结果集做Filter操作)

示例:

Cluster Index Scan:聚集索引扫描,表中所有的数据都存在于聚集索引的叶节点中,因此聚集索引扫描相当于将整个表中的数据都取出。

Non-clustered Index Scan:当查询的字段都被包含在一个覆盖索引中的情况下,查询优化器会优先使用Index Scan来查找这些数据,

因为非聚集索引比聚集索引占用的空间小,I/O成本更低。

示例:在Test表上创建一个覆盖索引  

Create index idx_Name_IdentityNo_Sex_Age_Job_LiveAddress on Test(Name) INCLUDE(Sex,IdentityNo,Age,LiveAddress,Job)

查询SQL

SELECT Name,Sex,IdentityNo,Age,LiveAddress,Job FROM dbo.Test

执行计划如下

2、SEEK操作符:

根据索引的不同可以分为:聚集索引查询非聚集索引查找

聚集索引查找发生在对聚集索引字段(一般情况下都是主键字段)进行where过滤的情况下

非聚集索引查找发生在对非聚集索引字段进行where过滤的情况下

3、Bookmark Lookup操作符:书签查找发生在非聚集索引的语句中,用于查询不包含在当前索引中的字段

一般优化手段是将额外的字段包含在一个Include索引

二、连接操作符

1、Nested Loop

一般外表为小表(一般小于10000数据),较大数据表做为内表。循环嵌套连接查找内部循环表的次数等于外部循环的行数,

因此最好对内表的相应的字段上建索引,否则内表将需要做多次的全表扫描,性能有可能会产生影响。

2、Merge Join

一般而言,当输入两端有序的情况下,适用Merge Join效率会比较高。

示例:b表中的ProductID上有建索引,此时输入两端都处于有序状态

SELECT  b.SalesOrderDetailID,a.Name FROM Production.Product a
JOIN Sales.SalesOrderDetail b ON a.ProductID=b.ProductID

如果输入两端处于无序的情况下,强制使用Merge Join连接,则将会额外多出排序操作以确保输入两端有序

SELECT  b.SalesOrderDetailID,a.Name FROM Production.Product a
INNER MERGE JOIN Sales.SalesOrderDetail b ON a.ListPrice=b.UnitPrice
WHERE a.ListPrice>5

3、Hash Join

连接表数据量较大,并且输入两端无序(连接列无索引)时,查询优化器将优先使用Hash Join连接方式

SELECT  b.SalesOrderDetailID,a.Name FROM Production.Product a
INNER JOIN Sales.SalesOrderDetail b ON a.ListPrice=b.UnitPrice

三、聚合操作符

聚合操作分两类:Stream Aggregate(流聚合)和Hash Aggregate(哈希聚合)

1、流聚合:

流聚合中又分两种:一种是不包含GROUP BY子句的也称为标量聚合,另外一种是包含GROUP BY子句聚合

标量聚合示例:

Group By聚合示例:

由执行计划可以看出,针对Group By字段上建立合适的索引,将省去额外的Sort操作。

2、哈希聚合:

当数据量较大,且输入端数据无排序的情况下,查询优化器一般会使用哈希聚合(迭代器名称为:Hash Match)

示例:

SELECT UnitPrice,COUNT(1) FROM Sales.SalesOrderDetail
GROUP BY UnitPrice

时间: 2024-10-06 22:44:48

常用执行计划操作符的相关文章

SQL Server 执行计划操作符详解(2)——串联(Concatenation )

本文接上文:SQL Server 执行计划操作符详解(1)--断言(Assert) 前言: 根据计划,本文开始讲述另外一个操作符串联(Concatenation),读者可以根据这个词(中英文均可)先幻想一下是干嘛的.其实还是挺直观,就是把东西连起来,那么下面我们来看看到底连什么?怎么连?什么时候连? 简介: 串联操作符既是物理操作符,也是逻辑操作符,在中文版SQL Server的图形化执行计划中称为"串联",在其他格式及英文版本中称为"Concatenation".

SQL Server 执行计划操作符详解(1)——断言(Assert

前言: 很多很多地方对于语句的优化,一般比较靠谱的回复即使--把执行计划发出来看看.当然那些只看语句就说如何如何改代码,我一直都是拒绝的,因为这种算是纯蒙.根据本人经验,大量的性能问题单纯从语句来看很难发现瓶颈,同一个语句,由于环境的不同,差距非常大,所以比较合适的还是分析执行计划. 那么对于执行计划,一般使用图形化执行计划就差不多了,但是用过的人也有一些疑惑,里面的图标(称为操作符)并不非常直观.所以从本文开始,会整理一些不怎么常见但由比较重要的操作符并进行解释,对于那些表扫描.索引扫描.聚集

查看Oracle SQL执行计划的常用方式

在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; 已解释. 第一种 最常用的 SQL> select * from table(dbms_xplan.display); Plan hash value: 3956160932 ----------------------------------------------------------------

Oracle执行计划

Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 因为我一直用的PLSQL远程连接的公司数据库,所以这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ->  首选项 ->   窗口类型  ->  计划窗口  ->  根据需要配置要显示在执行计划中的列

Atitit sql执行计划

1.1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的 Oracle中的执行计划显示在执行一条SQL语句时必须执行的详细步骤,通常以表格形式呈现,但其实是树形结构.查看Oracle中的执行计划一般有以下几种方法(包括但不限于). 不要把SQL语句写得太复杂 我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长.一般来说这么复杂的语句通常都是有问题的.我拿着这2页长的SQL语句去请教原作者,

MSSQLSERVER执行计划详解

序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博文给你:SqlServer性能检测和优化工具使用详细 ,sql语句的优化分析,T-sql语句查询执行顺序. 执行计划简介 1.什么是执行计划? 大哥提交的sql语句,数据库查询优化器,经过分析生成多个数据库可以识别的高效执行查询方式.然后优化器会在众多执行计划中找出一个资源使用最少,而不是最快的执行

SQL Sever 2008性能分析之执行计划

一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试 2的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把. 这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划. 缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存的执行计划,每个执行计划对应一行.Sy

SQL 执行计划(一)

缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存的执行计划,每个执行计划对应一行.Sys.dm_exec_plan_attributes: 这是一个系统函数,每一个执行计划都对应着一些属性,在这个系统函数中包含着这些属性.Sys.dm_exec_sql_text:             这是一个系统函数,返回文字格式的执行计划.Sys.dm_exec_query_plan:        这是一个

SQL性能分析之执行计划

一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把. 这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划. 缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:    包含缓存的执行计划,每个执行计划对应一行.Sys.