SQL 查询的执行过程
所述内容均来自互联网,文章仅作为学习笔记,备忘使用。
有时候我在想我们总是在谈优化,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 查询的执行过程的更多相关文章
- SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...
- ORACLE数据库SQL语句的执行过程
SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...
- 小觑数据库(SqlServer)查询语句执行过程
近年来,越来越多的NoSql产品不断的以技术革命的者的身份跳出来:“你看哥是多么的快,你们关型型数据库真是战五渣阿”.是的,高性能的场景下NoSql真的很出彩.而我们关系型数据库只能在墙角哭泣&quo ...
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- spring MVC +freemarker + easyui 实现sql查询和执行小工具总结
项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...
- [转]MySQL查询语句执行过程详解
Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...
- Mysql查询语句执行过程
Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...
- SQL查询语句执行流程
msyql执行流程 你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:: select * from T where ID=10: 我们看到的只是输入一条语句,返回一个结果,却不知 ...
随机推荐
- SOC
http://marsvaadin.iteye.com/blog/1311438 http://blog.csdn.net/cxxsoft/article/details/12610641
- mysql安装2
linux下安装mysql-5.1.51.tar.gz (2010-10-27 10:59:26) 转载▼ 标签: mysql 数据库 tar.gz安装 杂谈 分类: Mysql数据库 MySQL h ...
- java学习面向对象之static内存图解
上一节当中描述了static的用法,以及成员变量和静态变量的区别.但是static除了可以修饰成员变量使之成为静态变量外,他还可以同时修饰函数,使之成为静态函数,我们来看一个例子: class Sta ...
- Shredding Company(dfs)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3519 Accepted: 2009 Description You h ...
- bzoj2730
首先不难想到要先求割顶,求割顶的方法白书上有讲解由于是一个矿崩塌,所以假如一个连通块连接了两个以上割顶,那么这个连通块内显然是不用设出口的连接块只连接了一个割顶,那么出口可以设在这个连通块内任意位置由 ...
- Linux Shell编程(3)——运行shell脚本
写完一个脚本,你能够运行它用命令:sh scriptname, [5] 另外也也可以用bash scriptname. 来执行(不推荐使用:sh <scriptname, 因为这样会禁止脚本从标 ...
- HDU 5396 Expression(DP+组合数)(详解)
题目大意: 给你一个n然后是n个数. 然后是n-1个操作符,操作符是插入在两个数字之间的. 由于你不同的运算顺序,会产生不同的结果. 比如: 1 + 1 * 2 有两种 (1+1)*2 或者 ...
- QTP关于AOM的Javascript启动方式
序 QTP的AOM模型想必大家都很熟悉了,平时常用的就是通过VBS脚本的方式编写启动程序(也是我现在用的方法).其实,还有很多其他的方式,如Java,C#,JS,这些语言都是通过调用QTObjectM ...
- 暴力求解——UVA 572(简单的dfs)
Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...
- Adjacent Bit Counts(动态规划 三维的)
/** 题意: 给出一个01串 按照题目要求可以求出Fun(X)的值 比如: 111 Fun(111)的值是2: 输入: t (t组测试数据) n k (有n位01串 Fun()的值为K) 输出:有多 ...