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 ...
随机推荐
- Java trycatch使用重试Retryer
重试的工具类 Guava-retrying 依赖 <!-- https://mvnrepository.com/artifact/com.github.rholder/guava-retryin ...
- sql 查询哪些字段重复及(in和exict的区别)
select count(1),content_id,keyword_id from tb_content_keyword_relation group by content_id,keyword_i ...
- combineReducers(reducers)
combineReducers(reducers) 随着应用变得越来越复杂,可以考虑将 reducer 函数 拆分成多个单独的函数,拆分后的每个函数负责独立管理 state 的一部分. combine ...
- 24 Home Assistant
Home Assistant https://github.com/home-assistant/home-assistant python3 -m pip install homeassistant ...
- 解读Es6之 promise
单线程: 在同一时间只能有同一任务进行.JavaScript就是一门单线程语言 当有多个任务需要进行时,则需要进行排队,前一个执行完毕才能执行下一个; ...
- Centos 或者 Redhat修改系统时间
使用Redhat,打开电脑,系统时间比本地时间快一个小时 直接敲命令:date -s "2019-4-2 09:14:00"是立即生效了,但是重启后,系统时间还是原来的. 修改了其 ...
- ubuntu16.04 用devstack部署安装OpenStack ocata
原文链接 之所以再重复一下,是因为踩坑的过程,希望能帮助有需要的人. 介绍: 宿主机win10,在vmware下创建两台ubuntu16.04虚拟机,一台作为控制节点,一台作为计算节点, ...
- pygis库组件安装相关问题
python -m pip install --upgrade pip
- Invalid bound statement (not found) 终极解决办法
网上已经有很多文章说明可能导致这个报错的原因,无非是以下几种:1.检查xml文件的namespace是否正确 2.Mapper.java的方法在Mapper.xml中没有,然后执行Mapper的方法会 ...
- Windows通过URL启动本机App
Windows通过URL启动本机App http://xxx.itdhz.com/?file=001-Windows/100-Windows通过URL启动本机App