MySQL分层

MySQL分层

主要分为:连接层,服务层,引擎层,存储层

客户端执行一条select命令的流程如下

连接器

功能:

负责跟客户端建立连接、获取权限、维持和管理连接

细节:

1.当用户登录成功后,用户就会拿到权限信息,即使管理员更改了你的权限,但是在本次连接中你的权限依然不变

2.连接分,长连接、短连接,连接对象比较消耗内存,要注意连接的管理

报错:

mysql -u -p

这里就会返回账号密码错误

查询缓存

功能:

当连接建立完成后,如果执行查询语句,第二步就会执行查询缓存,如果缓存内有之前的查询结果,那么直接命中返回结果,效率会很高。

缺点(不推荐使用,利大于弊):

查询缓存很容易失效,如果一张表进行了一个更新,那么这张表所有的缓存会被清空。

注意:

MYSQL8.0直接把查询缓存这块给删除了

分析器

功能:

如果查询缓存没有命中,就会进入分析器,进行词法分析和语法分析,会分析表是否存在,字段是否存在等等

报错:

我们一般接触的最多的错误就是从这部分返回的

优化器

功能:

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多个多表查询的时候,会进行决定,用哪个索引,或者先查询哪个表。

虽然不管怎么查询,最后的结果都是一样的,但是不同的查询方式会有不同的查询效率

有时候觉得你写的sql语句太复杂了,性能太低了,mysql帮你的优化sql语句,提高效率(因为是帮你优化改写了你查询的sql,可能会出现一些问题)

执行器:

作用:

既然知道要查询什么,怎么查询了,那么就到了执行器执行的时候了,到这一步会检查你的权限,是否有权限操作相关的表,如果有权限,就打开表,然后根据表的引擎定义,去使用引擎的接口

报错:

如果在查询缓存就命中数据,但是没有权限,则权限错误在查询缓存就会出现,否则,就会在执行器,报出没有权限的错误

引擎:

图中有很多引擎,是因为MySQL有很多的引擎

select * from zx where id=125

执行流程:

(没有索引的表)

执行器调用InnoDB引擎接口取取zx表的第一行,然后判断id是否为125,如果满足条件就返回给结果集,如果不满足就继续拿下一条的数据重复操作,直到遍历了所有数据,最后把结果集返回给客户端

有索引的表,逻辑是差不多的,但是细节有差别

InnoDB和MyISAM区别

InnoDB(默认):事务优先(适合高并发:行锁)

MyISAM:性能优先(表锁)

MySQL分层和查询数据的流程的更多相关文章

  1. MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)

    在查询数据时,数据量多的时候,我们会使用分页功能. 每页显示多少数据. 这种情况下,一半看不出什么问题. 而导出数据时,有时就是通过分页的方法,逐步讲数据追加到导出文件中. 当全部数据都导出之后,就有 ...

  2. php 基本连接mysql数据库和查询数据

    连接数据库,有三种方法 1. 常规方式: $con=mysql_connect($dbhostip,$username,$userpassword) or die("Unable to co ...

  3. IntelliJ IDEA2017 java连接mysql数据库并查询数据

    最近自己开始重新学习java基础了,做java开发不可避免要处理数据库,由于好久不写java了,对idea也有点陌生了.所以这里写篇用jdbc来连接mysql的文章 至于mysql怎么装,请自行百度  ...

  4. MySQL下分页查询数据

      -- 分页 -- 前两条 -- 启始位置从下标0开始,查询的是数据库中的第1条开始 -- 0:启始位置 2:一次性查询多少条 select * from account LIMIT 0,2; -- ...

  5. java实现连接mysql数据库单元测试查询数据项目分享

    1.按照javaweb项目的要求逐步建立搭建起机构,具体的类包有:model .db.dao.test;具体的架构详见下图: 2.根据搭建的项目架构新建数据库test和数据库表t_userinfo并且 ...

  6. MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  7. 十二、MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  8. php MySQL 查询数据

    以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT ...

  9. 吴裕雄--天生自然MySQL学习笔记:MySQL 查询数据

    MySQL 数据库使用SQL SELECT语句来查询数据. 可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MySQL数据库中查询数据通用 ...

随机推荐

  1. Centos 7修改hostname浅析

    之前写过一篇博客"深入理解Linux修改hostname",里面总结了RHEL 5.7下面如何修改hostname,当然这篇博客的内容其实也适用于CentOS 6,但是自CentO ...

  2. 使用Bind提供域名解析服务(反向解析)

    小知识: 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访问网络中的资源,但是计算机主机在互联网中只能通过IP识别对方主机,那么就需要DNS域名解析服务了. DNS域名 ...

  3. C语言I作业05

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9772 我在 ...

  4. 上下文管理器及with的相关总结

    什么是上下文管理器 基本语法 with EXPR as VAR: BLOCK 概念 上下文表达式:with open('test.txt') as f: 上下文管理器:open('test.txt') ...

  5. 洛谷P5520 【[yLOI2019] 青原樱】

    这题是小学奥数啊. 题意:求\(m\)个不同物品两两不相邻的方案数. 直接排列组合. 我们可以减掉他们之间最少需要空出来的位数--\(m-1\)个空位 像这样,我们只用留\(m-1\)个空位放在每两个 ...

  6. [考试反思]1018csp-s模拟测试79:荒谬

    对,如果你想把第5名粘进来,那么图片就是这么夸张. 然而和我并没有什么关系,实在是太菜了. 但是还是想吐槽出题人是真心没良心啊...做了达哥的良心题之后眼光极其挑剔 这套题的部分分设置非常愚蠢,唯一一 ...

  7. Vue 2.x 3.x 配置项目开发环境跟线上环境

    先找到package.json  (这是nuxt版的vue 可能会跟一般vue不一样  当然总体上差不多的) "scripts": { "dev": " ...

  8. Redis持久化的几种方式——深入解析RDB

    Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而 ...

  9. 软件 ---- idea启动

    1.将配置转移到别的盘符,避免重做系统后,之前的配置就没了 找到安装的位置,默认安装的话地址一般是 C:\Program Files\JetBrains\IntelliJ IDEA 2017.2 ID ...

  10. git push后出现错误 ![rejected] master -> master(non-fast-forward) error:failed to push some refs to 'XXX'

    本地创建了一个project并在GitHub上创建了一个仓库,想要将本地的仓库链接到远程仓库我用的是如下方法:git init    //初始化本地仓库git remote add origin XX ...