所述内容均来自互联网,文章仅作为学习笔记,备忘使用。

  有时候我在想我们总是在谈优化,FA 优化结构、优化框架、优化程序…,可是我真的了解将要进行的操作[优化]吗?以最近我的工作-优化SQL为例,我真的明白一条SQL从提交服务器到返回数据所经理的过程吗?貌似这些理论知识以前都看过,但年代久远在我的记忆中已经变的相当模糊。现在重新来认识一下:

查询解析:

  当服务器接收到请求,获取到需要当前需要执行的字符串[SQL语句],首先会对其进行解析,看看是否符合基本的语法结构,如果没有问题,将继续进行后续步骤,反之则给出响应的错误提示。当然如果是DDL语句就不用再看了,SQL不会对DDL进行优化。

深度查询解析:

  看网上的大牛称这步为Algebrizer,为了方便本人记忆我称之为深度解析,它完成一些基本但更深入的评估工作,例如对方是否存在等等。如果没有发现问题,Algebrizer 输出一个二进制数据称为查询处理树,并传输给查询优化器。查询处理树包含了一个Hash值(描述查询的一个已经编码的值)。优化器根据这个Hash值去确认当前的查询计划是否存在,如果当发现已经存在,优化过程将在这里结束并使用这个计划。查询计划是什么呢?其实我们经常见到,就是平时不太注意,我们有两种方式来查看查询计划:图表、列表

 SET STATISTICS PROFILE ON
SELECT d.name FROM HumanResources.Department AS D WHERE d.DepartmentID=42
这样就可以看到表格形式的查询计划了。

  

查询优化:

  优化器本质是一块模型,用于模拟数据库关系引擎如何工作的软件。统计信息是核心,它是由SQLServer针对索引和列产生并维护的,明确用于优化的组件。需要注意的是表变量没有统计信息而临时表拥有和物理表一样的统计信息。通过查询处理树和关于数据的统计信息,优化器应用模型将给出它认为最佳的查询的方式,也就是说,它产生一个执行计划。优化器会产生并评估很多计划并缓存计划[存放在名为plan cache的内存中],通常来说,SQL会选择开销最低的计划,也就是它认为的最优计划,多数情况下SQL的选择都是正确的。有时候,优化优化器执行的并不是最好的执行计划,而是找到最少可能的迭代次数的最低开销的计划,也就是说找到在处理过程中最短时间的计划,当然有时候也会执行一个并不很好的计划。

查询执行:

  当上面的步骤都已经完成,计划已经制定,那就要开始干活了,这个时候将由分析引擎切换到存储引擎。由它来完成整个查询计划的实施过程。一般来说这个步骤是整个请求响应的最后一步。但也不是一定的,特定的情况下查询计划会发生更改,从而回到查询计划的评估和制定步骤,例如统计信息发生了变化、查询中使用了临时表等。

            SQL的执行顺序

SQL 查询的执行过程的更多相关文章

  1. SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...

  2. ORACLE数据库SQL语句的执行过程

    SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...

  3. 小觑数据库(SqlServer)查询语句执行过程

    近年来,越来越多的NoSql产品不断的以技术革命的者的身份跳出来:“你看哥是多么的快,你们关型型数据库真是战五渣阿”.是的,高性能的场景下NoSql真的很出彩.而我们关系型数据库只能在墙角哭泣&quo ...

  4. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  5. MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)

    在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:

  6. spring MVC +freemarker + easyui 实现sql查询和执行小工具总结

    项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...

  7. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  8. Mysql查询语句执行过程

    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...

  9. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

随机推荐

  1. [LeetCode] Rearrange String k Distance Apart 按距离为k隔离重排字符串

    Given a non-empty string str and an integer k, rearrange the string such that the same characters ar ...

  2. Django模板系统——过滤器

    转自:https://www.douban.com/note/145065606/  <省得每次都得去翻麻烦> 过滤器,变量的显示形式的改变一.形式:小写{{ name | lower } ...

  3. php二维数组按照键值排序的方法

    //按照传入数组中的num倒序 public function numdesc($array,$key="num",$order="desc"){ $arr_n ...

  4. mysql的source命令

    第一次使用 source导入 sql 文件时,死活提示不成功,偶然发现在输入文件所在路径是,必须用 "/"斜杠,而不能是反斜框 "\".

  5. iBatis叙述

    1.添加Mybatis的配置文件conf.xml 在src目录下创建一个conf.xml文件,如下图所示: 2.定义表所对应的实体类 3.定义操作users表的sql映射文件userMapper.xm ...

  6. php图形图像处理之生成验证码

    \(^o^)/~ 现在网上越来越离不开验证码了,不知道小伙伴们知不知利用php的GD库就可以生成验证码,Σ(⊙▽⊙"a ...... 首先介绍几个需要用的函数. 1.imagesetpixe ...

  7. html css中id和class的区别比较

    在定义样式的时候,有时候会将id和class的用法弄混淆,所以在这里特意说明一下: id和class属性是网页中两个通用的属性,它们协同工作使整个页面变得丰富多彩.当我们为一个元素定义样式时.可以使用 ...

  8. UE4 RHI与Render模块简解

    UE4中的RHI指的是Render hardware interface,作用像Ogre里的RenderSystem,针对Dx11,Dx12,Opengl等等平台抽象出相同的接口,我们能方便能使用相同 ...

  9. 高通secury boot过程

    整理内容网盘地址: 链接:https://share.weiyun.com/79c3920b4f2097d93b719b3149a7f3f9 (密码:4jm9cx) 相关内容网站: http://bl ...

  10. MySQL INSERT UPATE DELETE语句

    插入完整一行 INSERT INTO customers(cust_name,cust_contact,cust_email,cust_address,cust_city,cust_state,cus ...