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

  有时候我在想我们总是在谈优化,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. SQL查询语句执行流程

    msyql执行流程 你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:: select * from T where ID=10: 我们看到的只是输入一条语句,返回一个结果,却不知 ...

随机推荐

  1. npm check failed 解决办法

    npm ERR! shasum check failed for C:\Users\MM\AppData\Local\Temp\npm-10900-415697c8\registry.npmjs.or ...

  2. 【HDOJ】3085 Nightmare Ⅱ

    双向BFS.注意,任何一个点出队后,首先需要考虑ghost. /* 3085 */ #include <iostream> #include <queue> #include ...

  3. Visual Studio Code尝试体验

    背景了解 偶然间看到一篇大赞Visual Studio Code的文章,就搜索了一下,发现网上基本一致的好评.虽然微软在2015年4月29号 Build 2015 大会上才发布,但免费,轻量,跨平台版 ...

  4. HDOJ(HDU) 2137 circumgyrate the string(此题用Java-AC不过!坑)

    此题如果有用JavaACDSee,请评论,谢谢了. Problem Description Give you a string, just circumgyrate. The number N mea ...

  5. SRM 393(1-250pt)

    题意:有m个人投票,每个人在心里对所有候选者排了一个序,比如“210”,则他最想投2号,如果2号已经出局他会投1号,最后投0号,否则弃权不投.选举时进行多轮投票,知道选出winner或者所有人均出局. ...

  6. top -bcn -1

    ^[[?1h^[=^[[?25l^[[H^[[2J^[(B^[[mtop #!/bin/bash#echo 性能数据捕捉时间: `date +%Y-%m-%d_%H:%M:%S` \n >> ...

  7. 武汉Uber优步司机奖励政策(1月18日~1月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. <一>初探js特效魅力之全选不选反选04

    初探js特效魅力04 我们在进入到公司里面工作的时候,做一个同一个项目,经常是大家分工合作,当我们写css时,一般不写在行间,因为这样会被误操作,也就是被乱删了都不知道,这样的后果是很难检查的 ,因为 ...

  9. Linux下设置允许myql数据库远程连接

    系统环境: Linux ubuntu --generic #-Ubuntu SMP Thu Apr :: UTC x86_64 x86_64 x86_64 GNU/Linux 系统中已经安装好mysq ...

  10. [Angular 2] Passing data to components with @Input

    @Input allows you to pass data into your controller and templates through html and defining custom p ...