mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?
本文基于----MySQL实战45讲(极客时间----林晓斌 )整理----->https://time.geekbang.org/column/article/68319
一、第一节:一条sql查询语句是怎样执行的
5.5.5版本以后,默认使用存储引擎为InnoDB
不使用查询缓存,MySQL8.0没有查询缓存这个功能
总体来说:MySQL分为service层和存储引擎层
1)service层包括:连接器、分析器、优化器、执行器;它涵盖了MySQL大多数核心服务功能,以及所有的内置函数(日期、时间、数学和加密函数),所有跨存储引擎都在这一层实现(触发器、存储过程、视图)
2)存储引擎负责数据的存储和提取,其架构模式是插件式的,包含:InnoDB、MyISAM、Memory等5.5.5版本以后,默认使用存储引擎为InnoDB,选择其他引擎可以在建表时进行选择,不同的存储引擎用的是同一个server层
mysql> select * from T where ID=10;
(1)连接器:建立连接、获取权限、维持和管理连接
mysql -h$ip -P$port -u$user -p
如果通过则开始验证权限:否则 access denied for user
建立连接之后,会保持连接,处于空闲的状态,使用 show processlist 可以查看,如果长时间没动静,连接器会自己断开,wait_timeout 控制,默认为8小时,
长连接是如果连接过后,客户端一直有请求,则一直使用同一个连接,短连接则是每次执行完很少的几次查询之后就断开了,下次查询再重新进行连接;
全使用长连接之后,会大量占用内存,导致oom,解决方案:定期断开长连接,5.7版本之后,执行一个比较大的操作之后,使用mysql_reset_connection 初始化连接资源
(2)查询缓存:MySQL接收到查询缓存之后,会先到缓存看是否执行过相同语句,击中则返回,否则继续往下
一般都不建议使用缓存,8.0之后直接抛弃了这一部分的功能,why?:
查询缓存实效非常频繁,只要对一个表有更新操作,该表的缓存就会被清空;query_cache_type 设置为DEMAND,这样的sql语句都不使用缓存;如需使用,如下:
mysql> select SQL_CACHE * from T where ID=10;
(3)分析器:检查语法,分析语句:
mysql> elect * from t where ID=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from t where ID=1' at line 1
注意near附近的提示查找到错误;
(4)优化器:当表有多个索引的时候,决定使用哪个索引,或者有多个表关联的时候,决定各个表的连接顺序
(5)执行器:当知道你需要做什么时,进入执行阶段,开始执行语句:
mysql> elect * from t where ID=1;
开始执行时,还会判断一下登录用户有没有这张表的查询权限 ,
慢数据中会看到rows_examined ,表示执行了多少次行扫描;
mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?的更多相关文章
- 01.基础架构:一条SQL查询语句是如何执行的?学习记录
01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...
- 一文读懂一条 SQL 查询语句是如何执行的
2001 年 MySQL 发布 3.23 版本,自此便开始获得广泛应用,随着不断地升级迭代,至今 MySQL 已经走过了 20 个年头. 为了充分发挥 MySQL 的性能并顺利地使用,就必须正确理解其 ...
- mysql实战45讲读书笔记(一) 一条SQL查询语句是如何执行的
我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MySQL的学习也是这样.平时我们使用数据库,看到的通常都是一个整体.比如,你有个最简单的表 ...
- 01 | 基础架构:一条SQL查询语句是如何执行的?
这是专栏的第一篇文章,我想来跟你聊聊MySQL的基础架构.我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MySQL的学习也是这样.平时我们 ...
- 一条SQL查询语句是如何执行的?
本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构. 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_inf ...
- 基础架构:一条SQL查询语句是如何执行的?
https://time.geekbang.org/column/article/68319?code=pEYaxHnjO23LQHW4CJgL706EXlpAJnbOOiT2y42cWwU%3D 这 ...
- 一条SQL更新语句是如何执行的
文章首发于公众号「蝉沐风」,认真写好每一篇文章,欢迎大家关注交流 这是图解MySQL的第2篇文章,这篇文章会通过一条SQL更新语句的执行流程让大家清楚地明白: 什么是InnoDB页?缓存页又是什么?为 ...
- MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行
最近在学习林晓斌(丁奇)老师的<MySQL实战45讲>,受益匪浅,做一些笔记整理一下,帮助学习.如果有小伙伴感兴趣的话推荐原版课程,很不错. 1) --基础架构,一条SQL查询语句如何执行 ...
- mysql系列-⼀条SQL查询语句是如何执⾏的?
⼀条SQL查询语句是如何执⾏的? ⼤体来说,MySQL 可以分为 Server 层和存储引擎层两部分 Server 层 Server 层包括连接器.查询缓存.分析器.优化器.执⾏器等,涵盖 MySQL ...
随机推荐
- ajax提交 的编码小结
今天用ajax的post方法提交数据给webservice,由于有email的缘故发现,注册方法调用总是报错,打开报文一看提交的 发现@符号被变成了%40 , abc@126.com 即abc%401 ...
- ES使用小结之索引Rollover
Elasticsearch 使用小结之索引Rollover 索引名 一般而言,客户端将数据每天写入一个索引,比如直接写入YYYY-MM-HH格式的索引,那么我们只需要在写入的客户端里面获取时间,然后得 ...
- 【51nod】2591 最终讨伐
[51nod]2591 最终讨伐 敲51nod是啥评测机啊,好几次都编译超时然后同一份代码莫名奇妙在众多0ms中忽然超时 这道题很简单就是\(M\)名既被诅咒也有石头的人,要么就把石头给没有石头被诅咒 ...
- ffmpeg AVPacket结构体及其相关函数
0. 简介 AVPacket结构体并不是很复杂, 但是在ffmpeg中用的非常多. 与其相关的函数也是比较多. AVPacket保存了解复用之后, 解码之前的数据, 和这些数据相关的一些附加信息. 对 ...
- jemeter鬓发压力测试包
使用: 为子线程添加响应时间:https://www.cnblogs.com/duanxz/p/5464993.html 结果查看分析:聚合报告在监听器里面: https://wenku.baidu. ...
- 【小知识点】input输入框在安卓以及IOS手机中光标及字体不居中解决方法
问题根本:不要使用line-height垂直居中. 解决方法:可直接定义height,然后高度由上下padding值撑开. input { height: 1rem; padding: 1rem 0; ...
- 转 Git使用教程,最详细,最傻瓜,最浅显,真正手把手教
预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 这个也不错 https://www.cnblogs.com/qcloud1001/p/9796750.html 一:Git是什么?Gi ...
- springboot有第三方jar打包成jar
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...
- 一个用JavaScript生成思维导图(mindmap)的github repo
github 地址:https://github.com/dundalek/markmap 作者的readme写得很简单. 今天有同事问作者提供的例子到底怎么跑.这里我就写一个更详细的步骤出来. 首先 ...
- 阿里云Ubuntu下tomcat8.5配置SSL证书
环境 阿里云ubuntu(18.04)服务器 阿里云申请的域名 Tomcat8.5.7 jdk1.8 免费型SSL证书 SSL证书申请 登录阿里云的官网,登录后在菜单中选择SSL证书(应用安全) 进入 ...