本文接上文:SQL Server 运行计划操作符具体解释(1)——断言(Assert)

前言:

依据计划。本文開始讲述另外一个操作符串联(Concatenation)。读者能够依据这个词(中英文均可)先幻想一下是干嘛的。事实上还是挺直观,就是把东西连起来。那么以下我们来看看究竟连什么?怎么连?什么时候连?

简单介绍:

串联操作符既是物理操作符,也是逻辑操作符。在中文版SQL Server的图形化运行计划中称为“串联”,在其它格式及英文版本号中称为“Concatenation”。

其图标为:。它扫描多个输入并返回每一个扫描的行。

通经常使用于实现T-SQL中的UNION ALL。它能够有多个输入,但仅仅有一个输出,就如多个集合UNION ALL一样,终于返回一个结果集,注意这里一直使用“集合/集”,关系数据库是基于集合论的。所以使用关系数据库时要以集合的思维去考虑问题。

在运行计划中的每一个操作符。都要实现三个方法/函数:Init()、GetNext()和Close()。

前面说了,串联操作符是当中一种能够接受多个输入的操作符,这些输入会在Init()方法中处理。

在Init()方法中,串联初始化然后建立所需的数据结构。然后在运行GetNext()方法读取输入集中的第一行及兴许行。直到把输入集合里面的全部数据读取完成为止。

环境搭建:

以下创建一个測试表并循环插入10000行数据。
USE tempdb
GOIF OBJECT_ID('TEST', 'U') IS NOT NULLDROP TABLE TEST
GOCREATE TABLE Test (ID INT Identity(1, 1) PRIMARY KEY,Nome VARCHAR(250) DEFAULT NewID())
GOSET NOCOUNT ON
GOINSERT INTO Test DEFAULT
VALUES
GO 10000

串联演示:

前面提到,串联主要用于实现T-SQL的UNION ALL ,那么如今就来看看UNION ALL的情况:
开启实际运行计划并运行以下语句:
SELECT * FROM TEST
UNION ALL
SELECT * FROM TEST
UNION ALL
SELECT * FROM TEST
UNION ALL
SELECT * FROM TEST

运行计划例如以下:

假设使用SET SHOWPLAN_TEXT ON来查看的话能够看到例如以下结果:
这个图的含义是把4个“Clustered Index Scan”的结果塞到一个结果集,然后调用Init()和GetNext()方法去遍历这些数据,然后输出。另外须要说明的是这个操作符是依据T-SQL中结果集的出现顺序来处理的,为了证明这个想法,我们来改写一下语句:
SET SHOWPLAN_TEXT ON
GO
SELECT * FROM TEST
WHERE ID<100
UNION ALL
SELECT * FROM TEST
WHERE ID BETWEEN 101 AND 1000
UNION ALL
SELECT * FROM TEST
WHERE ID BETWEEN 1001 AND 5000
UNION ALL
SELECT * FROM TEST
WHERE ID >5001

然后看看输出:

对照一下參数可得每一个Clustered Index Seek的顺序和语句的出现顺序是一致的。另外读者可能留意到每行最后的ORDERED FORWARD,其含义是扫描索引的顺序是依照聚集索引的顺序并向前扫描。
关于这个话题能够看看SQL Server技术内幕主要作者Kalen Delaney的博客:Ordered Seeks and Scans。

总结:

本文主要演示了串联操作符的情况,而且主要以T-SQL中的UNION ALL来触发。由于眼下没有不论什么资料显示是否仅UNION ALL才会使用,所以这里也不做绝对的推断,读者仅仅须要知道这个操作符的含义、常见情景就可以。另外读者能够使用UNION 来检查运行计划。实际上UNION 是不用串联的,由于它本质上须要去重。所以使用不同的操作符来实现。比方Merge Join,在兴许再介绍。
下一篇将介绍:计算标量:Compute Scalar  

SQL Server 运行计划操作符具体解释(2)——串联(Concatenation )相关推荐

  1. 一文搞定 SQL Server 执行计划

    导读 数据开发过程中,开发完成的 SQL 发布到生产环境,经常会发生 SQL 执行慢甚至根本无法执行,如何避免这种情况呢?这一篇我们分析一下 SQL Server 的执行计划是如何生成及如何阅读评估执 ...

  2. SQL Server 执行计划(8) - 使用 SQL 执行计划进行查询性能调优

    在本系列的前几篇文章(见底部索引)中,我们介绍了SQL 执行计划的多个方面,我们讨论了执行计划是如何在内部生成的,不同类型的计划,主要组件和运算符以及如何阅读和分析使用不同工具生成的计划.在本文中,我 ...

  3. SQL Server 执行计划缓存

    原文:SQL Server 执行计划缓存 标签:SQL SERVER/MSSQL SERVER/数据库/DBA/内存池/缓冲区 概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储 ...

  4. 剖析SQL Server执行计划

    -->Title: 淺議SQL Server执行计划 -->Author: wufeng4552 -->Date :2009-10-20 15:08:24 前言: 最近溫習了執行計劃 ...

  5. Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号

    原文: Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号 原文出处:http://blog.csdn.net/dba_hua ...

  6. 引用:初探Sql Server 执行计划及Sql查询优化

    引用:初探Sql Server 执行计划及Sql查询优化 原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之-- ...

  7. sql server 缓存_了解SQL Server查询计划缓存

    sql server 缓存 Whenever a query is run for the first time in SQL Server, it is compiled and a query p ...

  8. SQL Server执行计划那些事儿(3)——书签查找

    接下来的文章是记录自己曾经的盲点,同时也透漏了自己的发展历程(可能发展也算不上,只能说是瞎混).当然,一些盲点也在工作和探究过程中慢慢有些眉目,现在也愿意发扬博客园的奉献精神,拿出来和大家分享一下. ...

  9. SQL Server执行计划面试问题

    In this article, we will discuss a few very common questions that you may be asked during a SQL Serv ...

最新文章

  1. linux驱动 pcie 框架_Linux PCI 设备驱动基本框架(二)
  2. 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
  3. 图像分割总体介绍——深度AI科普团队
  4. 【我的物联网成长记1】如何进行端到端开发?
  5. webpack静态资源地址注入html,Webpack4+ 多入口程序构建
  6. 挣扎 7 年,苹果 Siri 还是被“抛弃”了
  7. Spyder突然提示打开kernel时发生错误
  8. Javascript特效:上传图片格式判断(通过后缀)
  9. 【工业互联网】一张图看清工业互联网发展史
  10. 2021年中国危险废物产量、处理量及回收利用量分析[图]
  11. Java File分隔符和 Path分隔符
  12. Jenkins中Maven构建Archiving会重命名jar
  13. linux(CentOS7)服务器环境搭建之-supervisor
  14. Spring核心原理及工作方式
  15. 网易、百度等公司面试题整理
  16. DuiLib的第一个win32程序
  17. 消失在西雅图的夜空中---美国历史上最神秘的劫机案
  18. 线性代数复习归纳(一):矩阵+例题
  19. 毕业设计 基于Web停车场管理系统的设计与实现
  20. android 6.0 小米note,终于来了 小米Note刷入官方Android 6.0

热门文章

  1. 【AI】dlib中图像标注工具 imglab 详细说明
  2. C++ Primer 读书笔记 (1)
  3. docker mysql 生产环境_Docker构建MySQL环境
  4. python实现matlab中的diff,Python实现matlab数据绘制
  5. eclipse xsd 生成java,Generate XSD from JAXB Java Classes using Eclipse
  6. 怎么连接屏幕_手机屏幕坏了也可以操作?这办法学会了再不怕碎屏
  7. 若依前后端分离如何写移动端接口_前后端分离实践的架构设计
  8. mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能
  9. dmol3给定关键字不在字典中_python中的数据结构与算法(2):字典与集合
  10. 【spring】spring JDBC开发 、 将创建表生成sql语句的方法