本文基于----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查询语句是如何执行的?的更多相关文章

  1. 01.基础架构:一条SQL查询语句是如何执行的?学习记录

    01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...

  2. 一文读懂一条 SQL 查询语句是如何执行的

    2001 年 MySQL 发布 3.23 版本,自此便开始获得广泛应用,随着不断地升级迭代,至今 MySQL 已经走过了 20 个年头. 为了充分发挥 MySQL 的性能并顺利地使用,就必须正确理解其 ...

  3. mysql实战45讲读书笔记(一) 一条SQL查询语句是如何执行的

    我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MySQL的学习也是这样.平时我们使用数据库,看到的通常都是一个整体.比如,你有个最简单的表 ...

  4. 01 | 基础架构:一条SQL查询语句是如何执行的?

    这是专栏的第一篇文章,我想来跟你聊聊MySQL的基础架构.我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MySQL的学习也是这样.平时我们 ...

  5. 一条SQL查询语句是如何执行的?

    本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构. 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_inf ...

  6. 基础架构:一条SQL查询语句是如何执行的?

    https://time.geekbang.org/column/article/68319?code=pEYaxHnjO23LQHW4CJgL706EXlpAJnbOOiT2y42cWwU%3D 这 ...

  7. 一条SQL更新语句是如何执行的

    文章首发于公众号「蝉沐风」,认真写好每一篇文章,欢迎大家关注交流 这是图解MySQL的第2篇文章,这篇文章会通过一条SQL更新语句的执行流程让大家清楚地明白: 什么是InnoDB页?缓存页又是什么?为 ...

  8. MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行

    最近在学习林晓斌(丁奇)老师的<MySQL实战45讲>,受益匪浅,做一些笔记整理一下,帮助学习.如果有小伙伴感兴趣的话推荐原版课程,很不错. 1) --基础架构,一条SQL查询语句如何执行 ...

  9. mysql系列-⼀条SQL查询语句是如何执⾏的?

    ⼀条SQL查询语句是如何执⾏的? ⼤体来说,MySQL 可以分为 Server 层和存储引擎层两部分 Server 层 Server 层包括连接器.查询缓存.分析器.优化器.执⾏器等,涵盖 MySQL ...

随机推荐

  1. [转帖]ECC公钥格式详解

    ECC公钥格式详解 https://www.cnblogs.com/xinzhao/p/8963724.html 本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥, ...

  2. HanLP-地名识别调试方法

    HanLP收词特别是实体比较多,因此特别容易造成误识别.下边举几个地名误识别的例子,需要指出的是,后边的机构名识别也以地名识别为基础,因此,如果地名识别不准确,也会导致机构名识别不准确. 类型1 数字 ...

  3. jenkins持续集成(windows slave+svn+.net)

    一.Windows slave配置 1.系统管理->节点管理->新建节点 2.节点列表中点击新增的节点名称按提示下载agent.jar, 在windows slave机器执行(copy页面 ...

  4. poj 2342 【Anniversary party】树形dp

    题目传送门//res tp poj 题意 给出一棵有权树,求一个节点集的权值和,满足集合内的任意两点不存在边 分析 每个点有选中与不选中两种状态,对于第\(i\)个点,记选中为\(sel_i\),不选 ...

  5. 消息服务百科全书——Kafka基本原理介绍

    架构 1.1 总体架构 因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理. 为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区.多个生产者和消费者能够同时生产和获取消息. 一 ...

  6. Codeforces 1247F. Tree Factory

    传送门 正难则反,把链操作成树不好想,那么考虑一下如何把树变成链 每次操作相当于把一个兄弟变成儿子(我把你当兄弟你竟然想把我当儿子.jpg) 注意到每次操作最多只能使树的深度增加 $1$ 因为链的深度 ...

  7. Cactus CodeForces - 231E (无向图缩环)

    大意: 给定无向图, 每个点最多属于一个简单环, 多组询问, 求给定起点终点, 有多少条简单路径. 先缩环, 然后假设两点树上路径经过$cnt$个环, 那么答案就为$2^{cnt}$. 要注意缩环建树 ...

  8. linux 安装redis 完整步骤

    最近在linux服务器上需要安装redis,来存放数据,增加用户访问数据的速度,由于是第一次安装,于是在百度上搜了一篇文章,按照这篇博客,顺利安装好了,因此将博主的文章拷过来记录一下,方便以后使用,也 ...

  9. JS的日期的知识与格式化

    需要知道的JS的日期的知识,都在这了 https://juejin.im/post/5d12b308f265da1b7c612746?utm_source=gold_browser_extension ...

  10. @media screen媒体查询实现页面自适应布局

    @media screen and (min-width:1200px){ //大于等于1200px才会进入 }   @media screen and (max-width:375px) { //小 ...