mysql笔记7--一句查询语句的过程
1 sql语句示例
select *from A where id=1
2 mysql基本架构图
(1)Mysql分为Server层和引擎层两个部分
(2)Server层包括连接器,查询缓存,分析器,优化器等,其功能包含了大部分内置函数(日期,时间等)。
(3)存储引擎默认使用InnoDB。其所有组件的基本架构图如下所示
3 Server层相关组件原理
执行逻辑第一步连接器
(1) 首先连接数据库,连接器负责与客户端建立连接,获取相关权限和管理这个连接。认证你的身份就是输入用户名和密码,如果不对,会返回没有权限,如果用户名
密码正确,就会从权限表中取出相应用户的权限。
通过命令显示当前的连接数,以及哪些是空闲连接(也就是字段为sleep的。那么如果客户端长时间保持连接但是没有什么其他的操作,连接器会自动的将其断开,默认8小时。配置文件中的wait_timeout
(2)长连接与短链接
长连接:客户端连接上以后,客户端保持请求,一直的使用这个连接。------>内存占用率高,导致OOM(系统杀死进程),采取的措施
定期断开连接。
mysql5.7以后的版本,当执行完一次操作时间比较长的任务时,可以通过mysql_reset_connect重新的初始化连接的资源。
短链接: 客户端连接以后,操作一小会就断开,下次操作再连。
执行逻辑第二步查询缓存
(1) 查询缓存原理
当连接成功以后,比如咱们使用select查询,首先去缓存查看,缓存中是按照key-value的方式存储,key为执行的操作方法,value为执行操作后的结果,如果命中,直接返回查询
查询结果。
(2) 为什么不要使用查询缓存?
因为查询缓存的失败率很高,因为只要一个表更新,这个表所有的查询缓存就会清空。mysql5.7提供了参数去掉查询缓存,参数query_cache_type=DEMAND.mysql5.8
没有了缓存查询模块。
执行逻辑第三步分析器
(1)分析器步骤
分析器先做词法分析,比如通过"select"得知道是查询,"A"是表等。-------->语法分析,也就是看是否满足mysql语法,一般错误会提示第一个出现错误的位置。
执行逻辑优化器
经过了分析器大概知道了想做什么,那么优化器是从多种方案中选择一种更好(效率)。一旦优化得阶段确定,那么执行方案就确定了
执行逻辑执行器
(1)确认权限
先判断是否有权限对表进行相关操作,没有则报错。如果有权限,那么执行器会根据表得引擎定义,使用引擎提供的接口。
(2)执行器执行流程------比如最开始的创建的A表
调用引擎取表第一行,判断ID是否为1,如果是1存在结果集,不是则跳过
调用殷勤处理第二行,重复相同的逻辑
综合所有结果集和返回给客户端。
4 总结
学习了一个简单的select操作都经历哪几个步骤,每个步骤的具体作用是做什么,以及相关组件的优点缺点。
mysql笔记7--一句查询语句的过程的更多相关文章
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- [转]MySQL查询语句执行过程详解
Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...
- Mysql查询语句执行过程
Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- Mysql补充部分:SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- mysql常用内置函数-查询语句中不能使用strtotime()函数!
来自:http://yushine.iteye.com/blog/775407 FROM_UNIXTIME把 unix时间戳转换为标准时间 unix_timestamp把标准时间转换为 unix时间戳 ...
- MySQL指定使用某个索引查询语句
查询语句查询emp_no,所以先查询emp_no的索引使用primary select emp_no,salary from salaries use index(s_f_t) where emp_n ...
随机推荐
- woocommerce模板制作简易教程
woocommerce是wordpress里比较好用的电商解决方案,但是制作woocommerce模板相对比较复杂,如果想用woocommerce来建一个展示型的网站,不带下单功能,我们可以很快就能把 ...
- springMVC(2)
SpringMVC_JSR303数据校验 1.需要加入hibernate validator验证框架 2.在springMVC配置文件中添加<mvc:annotation-driven/> ...
- log4j2 配置文件解读
1.日志相关介绍 日志接口(slf4j):slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用,比如log4j.l ...
- (知识点4)C++ 中vector
1.定义vector<vector<int>> M; 2.添加元素这里是vector的嵌套使用,本质是vector元素里的每个元素也是vector类型,所以抓住本质来添加元素就 ...
- [图形计算器]Desmos
一.图形计算器 var elt = document.getElementById('calculator'); var calculator = Desmos.GraphingCalculator( ...
- 数列的通项公式$a_n$的求法
前言 求数列的通项公式,其本质是求函数的解析式.重点理解内涵. 求解必备 你见到这样的式子\(a_{n+1}-a_n = m\) (\(m\)常数)你一定会反应出是等差数列,那么见到 \(S_{n+1 ...
- 【JZOJ6245】【20190627】A
题目 给定一颗\(n\)个点的树,边权为1,并给出\(\{w_i\}\)满足\(w_0=0\) \[ f(i) = \sum_{j=1}^{n} w_{dis(i,j)} \] 依次输出每一个\(f_ ...
- ubuntu之路——day17.3 简单的CNN和CNN的常用结构池化层
来看上图的简单CNN: 从39x39x3的原始图像 不填充且步长为1的情况下经过3x3的10个filter卷积后 得到了 37x37x10的数据 不填充且步长为2的情况下经过5x5的20个filter ...
- Linux上DNS解析总是选择resolv.conf中第二位的DNS服务器IP地址
问题现象: 在Linux机器上,用户自建了一台DNS服务器.然后改动/etc/resolv.conf将其服务器IP地址添加到第一项.将阿里云的内网DNS放到第二位,然而在测试过程中发现telnet,p ...
- Linux-Centos学习笔记
Linux目录结构: 只有1个目录,根目录 usr:相当于program files etc:存放系统配置文件 root:系统管理员默认目录 home:存放其他用户的目录 pwd: 打印当前目录 cd ...