当我们在SQL Server Management Studio的查询里面输入: SELECT * FROM t1 WHERE c1=2;

背后发生了什么?数据库怎么去执行查询的? -  知其然不知其所以然。

1.         Query Parsing, Synatax Error Check, and Authorization: Query Processer check the user is authorized to run the query;(查询处理器首先进行语法解析,语法检查,并检查授权。如果没有获得授权执行相关的操作,或者语法错误,将报错。)

2.         Query Re-writingSemantic Optimization; (查询处理器重新写SQL语句并做相应的优化)。

例如:SELECT Emp.name, Emp.salary
                         FROM Emp, Dept
                            WHERE Emp.deptno = Dept.dno

Join是多余的,查询处理器会重写该语句并删除到表Dept的Join。

3.         Compile the SQL into internal query Plan; (编译SQL到内部查询计划)

数据库会选择最佳的方法来计算结果集。例如进行全表扫描,或是使用索引(pairs of key and location,类似书的目录)。数据库会比较它们的成本,并形成内部执行计划。数据库内部负责计算选择最佳执行计划的组件叫优化器(Optimizer)。

4.         The query plan is handled by plan executor, which consists of many operators, e.g. joining, sorting, grouping... (查询计划被计划执行器执行。计划执行器包含很多操作者,例如执行Join, Sort, Group等,还要有访问方法管理器来决定存取哪些数据页或索引页,或是直接缓存命中,这些有缓冲管理器负责... ...)

5.         Transaction manager is started as well to ensure the ACID of operations. (事务管理器同时启动来保证原子操作的并发一致性, 其他例如锁管理器、索引管理器、行管理器、页面文件管理器、缓冲管理器、日志管理器和等也会执行,而不是有查询执行器一人包办所有。)

执行如下语句:SELECT * FROM t1 WHERE c1=2的简单过程:

1.        扫描t1表,如果是开始则取第一条记录,否则取下一条记录;如果读到表的最后一条记录了那么跳到第4步。

2.        检查记录是否满足WHERE条件;是则进入第3步,否则回到第1步。

3.        把记录加到结果集。

4.        返回结果集给客户端。

如果表有索引,优化器可能比较全表扫描和索引,并可能决定执行计划为扫描索引。则步骤类似,不过第1步变成:

扫描索引(Clustered or no-clustered)并定位到记录。

例如:

SELECT * FROM Customers WHERE contactID IN

(SELECT contactID FROM Contacts WHERE contactID=86)

ORDER BY CustomerName DESC;

增加的步骤有:

1.        在表[Contacts]中扫描索引并定位记录。

2.        在表[Customers]中扫描索引并定位记录。

3.        Hash match (inner join),哈希匹配,连接。

4.        Sort,排序

有关Join

SQL Server employs three types of join operations:

  • Nested loops joins
  • Merge joins
  • Hash joins
  1. 如果Join的输入很小,例如小于10行,然后其他的Join输入很大并且索引在其列上,则Nested loops joins是最快的。(原因参考Understanding Nested Loops Joins)
  2. 如果两个Join输入都不小,但在索引列上排序(例如是在扫描排序的索引后获得的 scanning sorted indexes),则Merge joins是最快的。(原因参考Understanding Merge Joins)
  3. Hash joins可以有效的处理大量的、没有排序的、没有索引的输入。尤其对复杂查询的中间结果处理很有效。(更多参考Understanding Hash Joins)

这些只是一些简单的过程,其实数据库内部执行过程是相当复杂的。虽然我们不是数据库开发人员,但了解上下游的知识是必须的,能够有助于我们的开发和应用。技术不仅要知道怎么用,而且要知道为什么,不能知其然不知其所以然。最后附上一张数据库内部简单结构图供有兴趣的人参考。

转载于:https://www.cnblogs.com/Mainz/archive/2008/07/31/1257000.html

一句简单的SQL查询语句的背后...相关推荐

  1. MySQL番外篇:一条SQL查询语句是如何执行的?

    在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...

  2. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

  3. SQL查询语句大全(转)

    转自https://www.cnblogs.com/chenglc/p/8421492.html 重点参考https://blog.csdn.net/g1418377085/article/detai ...

  4. (转)经典SQL查询语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  5. 听说你写sql很溜,一条sql查询语句是如何执行的?

    我们项目中必不可少要与数据库接触,那么一条sql查询语句是如何执行的呢? 本文以MySQL数据库为例.MySQL是典型的C/S架构(client客户端/server服务端),客户端进程向服务端进程发送 ...

  6. orcal SQL查询语句大全集锦

    orcal   SQL查询语句大全集锦 一. 简单查询   简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例 ...

  7. (走向DBA[MSSQL篇] - 从SQL语句的角度提高数据库的访问性能)一些SQL查询语句应加上nolock

    http://kb.cnblogs.com/page/124787/#s8 最近公司来一个非常虎的DBA,10几年的经验,这里就称之为蔡老师吧,在征得我们蔡老同意的前提下 ,我们来分享一下蔡老给我们带 ...

  8. SQL查询语句 select 详解

    查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...

  9. 15个初学者必看的基础SQL查询语句

    1.创建表和数据插入SQL 我们在开始创建数据表和向表中插入演示数据之前,我想给大家解释一下实时数据表的设计理念,这样也许能帮助大家能更好的理解SQL查询. 在数据库设计中,有一条非常重要的规则就是要 ...

最新文章

  1. android 全局光标颜色,EditText修改光标和背景色(绝对简单实用)
  2. es中的DiscoveryModule
  3. 如何统计博客园的个人博客访问量
  4. SAP 电商云 Spartacus UI 从 shipping address 到 shipping method 的 HTTP 请求设计
  5. JDK 11:轻松取出单文件Java源代码程序
  6. Linux epoll的用法
  7. Python高能小技巧:了解bytes与str的区别
  8. 电脑应用程序错误怎么办_电脑Windows出错信息解析及解决方案
  9. 5个层次的赚钱模式,看看你是哪一种?
  10. java中 this详解
  11. 单片机控制10BitDA正弦信号发生器 PROTEUS 和51单片机教程(附仿真文件+源代码)
  12. win7显示文件的扩展名
  13. 威斯康星大学计算机科学教授,UW机器学习和数据科学活动吸引了国际知名的计算机科学家...
  14. 推荐几款地图软件,你家的老房子都能看得一清二楚
  15. html仿qq截图,截图工具(仿QQ截图,大致功能都已实现)
  16. 电脑死机是什么原因及解决方法
  17. NOIWC2018滚粗记
  18. azw3格式的电子书在kindle中怎么打开
  19. 计算机义务维修活动方案,最新义务维修活动策划书
  20. 程序员众生相——从乙方到甲方,我用了六年的时间

热门文章

  1. Java合并pdf文件
  2. 使用OpenCV进行多边形绘制和填充
  3. GoldenGate系统三:trouble shooting and log
  4. Linux命令学习总结:dos2unix - unix2dos
  5. Private Data Manipulation in Optimal Sponsored Search Auction
  6. Ctr点击率预估理论基础及项目实战
  7. 缓存穿透、缓存雪崩、redis并发
  8. iOS项目组件化历程
  9. Unity应用架构设计(6)——设计动态数据集合ObservableList
  10. Mybatis choose (when, otherwise)标签