查询处理图解

最近购买了《SQL Server 2008 内核剖析与故障排除》这本书,现对第5章 CPU和查询处理,5.4节 查询处理,这一篇幅的内容进行图解,希望可以帮助大家更好的理解查询。

SQL Server通过4个步骤处理一个查询:分析、绑定、优化、执行。

分析、绑定、优化都在关系引擎中完成。优化输出已调度好的执行计划,并在此调用存储引擎。

分析

分析:语法检查,例如错误的保留字、列和表名。没有错误则生成分析树(parse tree);若有错误则停止并返回错误。

绑定

绑定过程也称为标准化,绑定结束后会生成查询树。

  1. 名字解析:检查所有的对象在用户的安全上下文中存在并可见。即检查表名和列名,确保它们都存在并且用户对其拥有访问权限。
  2. 类型推导:确定解析树每个节点的最终类型。
  3. 聚合绑定:确定哪些地方可以进行聚合。
  4. 组合绑定:将聚合绑定到正确的选择列表中。

绑定过程可以检查出所有的语法错误,若有语法错误则停止并返回错误给用户。

查询优化

选择足够好的,非最佳的计划。

优化模型小结:

  • 这个计划有没有有效的缓存?有,责使用缓存的计划;没有继续。
  • 这个计划是不是普通计划?是,则使用这个普通计划;没有继续。
  • 执行简化。对查询树进行标准化,执行一些基本转化对查询树做进一步简化。
  • 计划的开销是否足够小?是,则使用这个计划。不是开始优化。
  • 开始基于开销的优化。
  • 阶段0:检验基本规则,以及散列和嵌套联接选项。这个计划开销是否小于0.2?是,使用该计划。不是继续阶段1。
  • 阶段1:检验更多规则,以及变换联接顺序。如果最好(开销最小)的计划开销小于1.0。则使用这个计划。如果不是,继续判断。如果MAXDOP>0且这个系统是SMP系统,以及最小开销计划大于并行化的开销阈值,则使用并行计划。比较并行计划的开销和最好串行计划的开销,将开销更小的计划传给阶段2
  • 阶段2:检验所有可能的计划,并且选择达到检验时间限制时,开销最小的计划。

输出可执行计划,并将这个计划存入缓存。

时间: 2024-10-08 06:37:52

查询处理图解的相关文章

DayDayUP_Python自学记录[13]_Python MySQL 交互

参考来源:菜鸟教程以及慕课网,如侵立删 参考链接: http://www.tuicool.com/articles/yqayEv http://www.runoob.com/python3/python3-mysql.html Python3 MySQL 数据库连接 准备 本文我们为大家介绍 Python3 使用 pymysql 连接数据库,并实现简单的增删改查. 什么是 pymysql? pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使

图解SQL多表关联查询

图解SQL多表关联查询 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习  内连接 左连接 右连接 全外连接

图解SQL子查询实例

1 创建示例表 先创建示例表: ------------------------- -- Create Customers table ------------------------- CREATE TABLE Customers ( cust_id char(10) NOT NULL , cust_name char(50) NOT NULL , cust_address char(50) NULL , cust_city char(50) NULL , cust_state char(5)

mybatis查询缓存——(十三)

1.     mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据.不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的. 二级缓存是mapper级别的缓存,多个SqlSession去操作同一个

图解 & 深入浅出JavaWeb:事务必会必知

图解 & 深入浅出JavaWeb:事务必会必知 转载自http://www.bysocket.com/ 事务,大家所熟悉的事务(Transaction),基本上会就往Spring事务靠.其实Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring事务管理的基础.这篇总结下数据库事务. 一.数据库事务 它的思想:we are 伐木累.就是多个SQL语句(一个团队),要么所有执行success,不然就fail. 它最终的目标:数据不会被破坏.即事务操作成功,数据的结

图解TCP/IP第五版 -- 目录

很多年前买过<TCP/IP详解>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是,买了太多的书,基本都没看,搬家搬来搬去的麻烦,不如从网上看些资料来的直接,三箱子书都卖了,有很多书都是当年颇有名的,书的范围也很广. 单说语言层面,其实当时没有理解语言的精髓,甚至把开发工具的熟练使用当做学会语言,现在还记得的,买过的有各种<开发人员指南>:Delphi.C++Builder.VB.ASP.JBuilder.C#:现在想来也是不

【web必知必会】—— 图解HTTP(转)

本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化.管道化.多部分对象集合.范围请求等 后续会更新http其他的相关知识. 关键词概念 平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? 先看看官方的解释: URL:uniform resource location 统一资源定位符 URI:unif

【转】mysql安装图解

转载地址:http://www.jb51.net/article/23876.htm 很多朋友刚开始接触mysql数据库服务器,下面是网友整理的一篇mysql的安装教程,步骤明细也有详细的说明. MySQL5.0版本的安装图解教程是给新手学习的,当前mysql5.0.96是最新的稳定版本. mysql 下载地址 http://www.jb51.net/softs/2193.html 下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下!打开下载的mysql安装文件mysql-5.0

读《图解HTTP》总结--第一章

一.第一章:了解Web及网络基础 1.基础知识     HTTP:(HyperText Transfer Protocol ,超文本传输协议)          客户端:发送请求获取服务器资源的web浏览器等都可以称为客户端          www : World Wide Web  万维网          URL :Uniform  Resource Locator ,统一资源定位符          URI  :Uniform Resource Identifier  统一资源标识符