1.mysql逻辑框架简介

  和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在
存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可
以根据业务的需求和实际需要选择合适的存储引擎。

各层介绍:

1.1 连接层

  最上层是一些客户端和连接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于tcp/ip 的
通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证
安全接入的客户端提供线程。同样在该层上可以实现基于SSL 的安全链接。服务器也会为安全接入的每个客户端验
证它所具有的操作权限。

1.2 服务层

Management Serveices & Utilities 系统管理和控制工具
SQL Interface:

SQL 接口。接受用户的SQL 命令,并且返回用户需要查询的结果。比如select from
就是调用SQL Interface

Parser 解析器。SQL 命令传递到解析器的时候会被解析器验证和解析
Optimizer

查询优化器。SQL 语句在查询之前会使用查询优化器对查询进行优化,比如有
where 条件时,优化器来决定先投影还是先过滤。

Cache 和Buffer

查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取
数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,
权限缓存等

1.3  引擎层

  存储引擎层,存储引擎真正的负责了MySQL 中数据的存储和提取,服务器通过API 与存储引擎进行通信。不同
的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

1.4 存储层

  数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

2.show profile

  利用show profile 可以查看sql 的执行周期!

2.1 开启profile

  查看profile 是否开启:show variables like '%profiling%'

  如果没有开启,可以执行set profiling=1 开启!

2.2 使用profile

  执行show prifiles 命令,可以查看最近的几次查询。

  根据Query_ID,可以进一步执行show profile cpu,block io for query Query_id 来查看sql 的具体执行步骤。

2.3 大致的查询流程

mysql 的查询流程大致是:
  mysql 客户端通过协议与mysql 服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,
否则进行语句解析,也就是说,在解析查询之前,服务器会先访问查询缓存(query cache)——它存储SELECT 语句以及
相应的查询结果集。如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。它仅
仅将缓存中的结果返回给用户即可,这将大大提高系统的性能。
  语法解析器和预处理:首先mysql 通过关键字将SQL 语句进行解析,并生成一颗对应的“解析树”。mysql 解析
器将使用mysql 语法规则验证和解析查询;预处理器则根据一些mysql 规则进一步检查解析数是否合法。
  查询优化器当解析树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式,
最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。。
  然后,mysql 默认使用的BTREE 索引,并且一个大致方向是:无论怎么折腾sql,至少在目前来说,mysql 最多只
用到表中的一个索引。

2.4 SQL的执行顺序

  

真正执行的顺序:
  随着Mysql 版本的更新换代,其优化器也在不断的升级,优化器会分析不同执行顺序产生的性能消耗不同而动
态调整执行顺序。下面是经常出现的查询顺序:

2.5 存储引擎MyISAM与InnoDB的对比

对比项 MyISAM InnoDB
外键 不支持 支持
事务 不支持 扶持 
行表锁

表锁,即使操作一条记录也会锁住整个表,
不适合高并发的操作

行锁,操作时只锁某一行,不对其它行有影响,
适合高并发的操作

缓存 只缓存索引,不缓存真实数据

不仅缓存索引还要缓存真实数据,对内存要求较高,而且内
存大小对性能有决定性的影响

  关注点

关注点 读性能 并发写、事务、资源
默认安装 Y Y
默认使用 N Y

自带系统表
使用

Y N

show engines:查看所有的数据库引擎

show variables like '%storage_engine%' 查看默认的数据库引擎

2.6 常见的join查询图

----尚硅谷_mysql_高级学习笔记

【mysql】mysql逻辑框架简介及show profile说明的更多相关文章

  1. MySQL数据分析—(4)关系数据库的三个逻辑框架

    (一)前面课程逻辑梳理 任何一门数据的软件也好,数据构架也好,或者说是数据学科也好,最终都是要解决实际问题的,大家说是不是? 前面jacky讲为什么要引入数据库的时候,举了一个案例,大家还记的吗?大家 ...

  2. MySQL各逻辑模块工作配合

    在了解了MySQL的各个模块之后(点击查看MySQL各个逻辑模块),我们再看看MySQL各个模块间是如何相互协同工作的.接下来,我们通过启动MySQL,客户端连接,请求query,得到返回结果,到最后 ...

  3. mysqldump常用于MySQL数据库逻辑备份

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  4. MySQL在Django框架下的基本操作(MySQL在Linux下配置)

    [原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...

  5. MySQL InnoDB 逻辑存储结构

    MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.p ...

  6. MYSQL Innodb逻辑存储结构

    转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...

  7. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

  8. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建

    目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...

  9. MySQL三层逻辑架构

    MySQL的存储引擎架构将查询处理与数据的存储/提取相分离.下面是MySQL的逻辑架构图: 第一层负责连接管理.授权认证.安全等等. 每个客户端的连接都对应着服务器上的一个线程.服务器上维护了一个线程 ...

随机推荐

  1. python使用笔记002

    一.字符串常用方法 1 s = ' ha.hahaha.' 2 print(s.count('a'))#找某一个元素在字符串里出现的次数 3 print(s.index('a'))#找某一个元素的下标 ...

  2. MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据

    本篇记录一下MQTT整合Spring Mvc配置直接收发字节流数据 设备方是纯C开发,并且为了交互数据的安全,将传送的数据用了AES CBC进行了加密. 接下来正常方便做法应该是 将加密后的字节流转换 ...

  3. final修饰符(7)-缓存实例的不可变类

    不可变类的实例状态不可改变,可以很方便地被多个对象所共享,可以考虑缓存这种不可变类的实例

  4. SpringBoot 构造器注入、Setter方法注入和Field注入对比

    0. 引入 今天在看项目代码的时候发现在依赖注入的时候使用了构造器注入,之前使用过 Field 注入和 Setter 方法注入,对构造器注入不是很了解.经过查阅资料看到,Spring 推荐使用构造器注 ...

  5. Flyway使用说明

    Flyway简介 Flyway是源自Google的数据库版本控制插件.项目开发中,数据库往往需要随着软件版本进行变化,相比起手动执行SQL脚本,flyway可以实现自动化的数据库版本修改,让开发/测试 ...

  6. SpringBoot中时间格式化的5种方法!

    在我们日常工作中,时间格式化是一件经常遇到的事儿,所以本文我们就来盘点一下 Spring Boot 中时间格式化的几种方法. ​ 时间问题演示 为了方便演示,我写了一个简单 Spring Boot 项 ...

  7. JDBC连接流程

    ConectionFactory cf = new ConectionFactory();//创建数据库连接Connection con = cf.getConection();//打开水数据库的连接 ...

  8. pytest框架

    1.添加日志 import logging logging.debug('This is debug message') logging.info('This is info message') lo ...

  9. 插入排序(insertion_sort)——Python实现

      # 插入排序 # 作用:对给出的n个顺序不定的数进行排序 # 输入:任意数组A # 输出:按顺序排列的数组A # 时间复杂度 n(n-1) 至 (n(n-1))/2   # 插入排序过程 # 第一 ...

  10. 2020厦门大学综述翻译:3D点云深度学习(Remote Sensiong期刊)

    目录 摘要 1.引言: 2.点云深度学习的挑战 3.基于结构化网格的学习 3.1 基于体素 3.2 基于多视图 3.3 高维晶格 4.直接在点云上进行的深度学习 4.1 PointNet 4.2 局部 ...