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: 我们看到的只是输入一条语句,返回一个结果,却不知 ...
随机推荐
- 终端上设置git
http://blog.163.com/xianfuying@126/blog/static/21960005201181482518631/ 在-/.ssh的位置vi id_rsa.pub 拷贝的时 ...
- windows 10家庭版升级到专业版
因为要搭建一个服务器,需要用到Docker,根据Docker的文档,Docker必须要安装在windows 10 企业版,专业版,或者教育版上.不然不能使用.一直以为要重新下载专业版的镜像重新安装wi ...
- Unity NGUI实现Tabview
unity版本:4.5.1 NGUI版本:3.5 参考链接:http://blog.csdn.net/g__dragon/article/details/17242969,作者:CSDN G_Drag ...
- WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞
漏洞名称: WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞 CNNVD编号: CNNVD-201307-609 发布时间: 2013- ...
- Android 安全测试
文章Android Security Tools对1~4的使用有介绍,下面主要分析其源码实现. 1.Manifest Explorer 2.Package Play Main.java public ...
- 科研论文提交流程与常见问题(EDAS 系统提交)
第一步 注册文章(Registering your Paper) 如上图,点击菜单中的submit paper按钮,会列出所有的会议和期刊,选择一个你要投稿的期刊或者会议,例如选择第一个2013 IE ...
- Elasticsearch教程之基础概念
基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 1.接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味 ...
- [Locked] Number of Connected Components in an Undirected Graph
Number of Connected Components in an Undirected Graph Given n nodes labeled from 0 to n - 1 and a li ...
- 用urllib2实现一个下载器的思路
下载器的构造 用urllib2实现下载器时从以下几个层面实现功能和灵活性: handler redirect, cookie, proxy 动作 timeout 构造请求 headers: ua, c ...
- OpenReports操作指南
最近要玩OpenReports,但在网上找了一圈,能用的资料少得可怜,所以把最近使用下来,积累的一些技巧记录下来(有部分整合了网上的资源). 备注:以下操作说明基于已做汉化的项目(汉化方案请参考:ht ...