返回顶部
首页 > 资讯 > 数据库 >Mysql实战45讲学习详情-
  • 862
分享到

Mysql实战45讲学习详情-

Mysql实战45讲学习详情- 2021-01-25 21:01:59 862人浏览 猪猪侠
摘要

大体来说,Mysql 可以分为 Server 层和存储引擎层两部分。         select * from T where ID=10; 这条查询语句的执行过程: 外部层:   用户与server层交互

Mysql实战45讲学习详情-

大体来说,Mysql 可以分为 Server 层和存储引擎层两部分。

 

 

 

 

select * from T where ID=10;

这条查询语句的执行过程:

外部层:

  用户与server层交互的媒介

    一.客户端【用于连接数据库,输入命令/语句】

      界面化连接数据库

      输入 select * from T where ID=10;

server层:

  Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 mysql 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

    二.连接器【连接器负责跟客户端建立连接、获取权限、维持和管理连接。】

      输入连接命令认证身份--mysql -h$ip -P$port -u$user -p
        认证通过:连接器会到权限表里查询帐号权限  

           P:之后所有的权限判断逻辑都会依赖此时读到的权限

              这意味着,一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。

        认证失败:Access denied for user

      连接完成后可以使用命令:show processlist查看状态

      Command 列显示为“Sleep”的这一行,就表示现在连接处于空闲状态

      客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。

      连接方式分为两种 :【长连接和短连接】

        定义:

          长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。

          短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。

        利弊:

          建立连接过程复杂,尽量使用长连接,减少建立连接操作

          全部使用长连接内存增长过快(PS:MySQL在执行时临时使用的内存管理器在连接对象里,这些资源只有在连接断开的时候释放,长连接累积下来内存占用过大,会被系统杀掉,现象就是异常重启)

        弊端的优化方法:

          定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。

          如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

    三.查询缓存

      连接建立完成后,进入执行阶段

        当MySQL拿到一个查询请求后,会先到查询缓存内查看key值,如果命中直接回返回结果。

          PS:之前执行过的语句及结果会以键值对的形式缓存到内存中,{key(查询语句):value(查询结果)}

        弊端:

          查询缓存的失效--只要对表更新,此表上的所有查询缓存就会失效。。so一半只有在很长时间不会更新的表才会使用查询缓存,例如:系统配置表

          如果不需要使用查询缓存功能,将参数 query_cache_type 设置成 DEMAND,而对于需要使用的语句可以使用“SQL_CACHE”单独指定出来:select SQL_CACHE * from T where ID=10;

    四.分析器

      现在是查询语句并没有在查询缓存中找到相应的key值,因此它需要对语句进行解析。

        ①,词法分析

          输入的语句是由多个字符串和空格组成的,MySQL 需要识别出里面的字符串分别是什么,代表什么

          例如:MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。

        ②,语法分析

          错误提示You have an error in your SQL syntax,要关注的是紧接“use near”

    五.优化器

      优化器的作用是确定执行方案

      在经过分析器后,MySQL已经知道你要干什么,现在需要优化器来确定使用哪一个执行方案,例如:

        select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;

        这条语句是t1和t2两个表的join,它会有多种执行方式,虽然结果相同但是效率会有很大的不同

    六.执行器

      MySQL通过分析器知道了要干什么,通过优化器知道了要怎么做,现在到了执行器,进入执行语句阶段

      ①,判断权限

        判断你是否有查询权限(此时的判断依据为连接器时读取到的权限),如有权限就可以打开表继续执行。

      ②,判断引擎

        打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

      ③,执行语句

          select * from T where ID=10;这条查询语句的执行过程为--【表 T 中,ID 字段没有索引

            调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中;

            调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。

            执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。  

存储层:

  存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

  create table建表时不指定引擎使用的默认引擎,可以在语句中添加engine=memory指定引擎

 

附加:

   如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?

【个人理解】

   分析器会对语法和词法进行分析判断,在此阶段会判断语句的正确性

您可能感兴趣的文档:

--结束END--

本文标题: Mysql实战45讲学习详情-

本文链接: https://lsjlt.com/news/5292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mysql实战45讲学习详情-
    大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。         select * from T where ID=10; 这条查询语句的执行过程: 外部层:   用户与server层交互...
    99+
    2021-01-25
    Mysql实战45讲学习详情-
  • MySQL实战45讲学习笔记---基础架构
        今天开始把《MySQL实战45讲》的知识做一笔记,在加深印象的同时,希望对其它人也有所帮助。    大体来说,Mysql可分为Server层和存储引擎层两大部分,如图:  其中,Serve层包括连接器、查询缓存、分析器、优化...
    99+
    2015-08-21
    MySQL实战45讲学习笔记---基础架构
  • Mysql实战45讲-
      即使是一个开发工程师,也只是 MySQL 的用户,但在了解了一个个系统模块的原理后,再来使用它,感觉是完全不一样的。   当在代码里写下一行数据库命令的时候,就能想到它在数据库端将怎么执行,它的性能是怎么样的,怎样写能让应用程...
    99+
    2017-08-21
    Mysql实战45讲-
  • Mysql实战45讲
    第一讲 基础架构 如上图所示MySQL整体来看,其实就有两块:一块是Server层,它主要做的是MySQL功能层面的事情;还有一块是引擎层,负责存储相关的具体事宜。 第二讲 日志系统 与查询流程不一样的是,更新流程还涉及两个重要的日志模块...
    99+
    2023-08-18
    mysql 数据库 java
  • 20200618_MySQL实战45讲_学习笔记_Order by
    表结构 -- auto-generated definition create table product_application_config ( id bigint auto_incre...
    99+
    2020-10-17
    20200618_MySQL实战45讲_学习笔记_Order by
  • 01.MySQL实战45讲学习笔记---基础架构
        今天开始把《MySQL实战45讲》的知识做一笔记,在加深印象的同时,希望对其它人也有所帮助。    大体来说,Mysql可分为Server层和存储引擎层两大部分,如图:  其中,Serve层包括连接器、查询缓存、分析器、优化...
    99+
    2015-11-25
    01.MySQL实战45讲学习笔记---基础架构
  • MySQL实战45讲之基础篇 - flowers
    本文主要记录学习MySQL实战45讲之基础篇过程中一些新的收获,以及总结主要内容。其中包括SQL如何运行、日志系统、事务隔离、索引和锁等。 前言 本文主要记录学习MySQL实战45讲之基础篇过...
    99+
    2016-05-09
    MySQL实战45讲之基础篇 - flowers
  • MySQL实战45讲——从删库到跑路
    作者:禅与计算机程序设计艺术 1.简介 随着互联网网站用户数量的不断增加、应用系统日益复杂化、海量数据存储的需求越来越高,传统关系数据库已无法满足业务快速发展和海量数据的高速增长,而分布式NoSQL...
    99+
    2023-10-11
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • PyTorch迁移学习实战
    目录1. 实验环境2. 实验目的3. 相关原理4. 实验步骤4.1 数据收集4.2 数据预处理4.3 创建模型4.4 结论1. 实验环境 Jupyter NotebookPython...
    99+
    2023-01-15
    PyTorch 迁移
  • python机器学习实战(一)
    原文链接:www.cnblogs.com/fydeblog/p/7140974.html 前言 这篇notebook是关于机器学习中监督学习的k近邻算法,将介绍2个实例,分别是使用k-近邻算法改进约会网站的效果和手写识别系统.操作系统:u...
    99+
    2023-01-31
    实战 机器 python
  • python机器学习实战(三)
    原文链接:www.cnblogs.com/fydeblog/p/7277205.html 前言 这篇博客是关于机器学习中基于概率论的分类方法--朴素贝叶斯,内容包括朴素贝叶斯分类器,垃圾邮件的分类,解析RSS源数据以及用朴素贝叶斯来分析不...
    99+
    2023-01-31
    实战 机器 python
  • Go语言实战学习之流程控制详解
    目录1. 前言2. if分支3. for及for-range循环4. switch-case-fallthrough分支5. goto6. break和continue7. 跳出嵌套...
    99+
    2024-04-02
  • Python学习教程:面向对象学习实力讲解
    类的实现class Cat:"""猫科动物类"""tag='我是家猫 'def __init__ (self,name,age=0): #没有默认值必须要传,且写在...
    99+
    2023-06-02
  • ElasticSearch学习之ESMapping实战示例
    目录什么是MappingMapping 属性字段类型(type)详解字符串类型数字类型日期类型布尔类型二进制类型范围类型复合数据类型数组类型对象类型嵌套类型地理数据类型地理坐标(ge...
    99+
    2023-01-31
    ElasticSearch ES Mapping ES Mapping
  • Python机器学习实战教程
    Python机器学习实战教程分享网盘地址——https://pan.baidu.com/s/1miIb4og 密码: wtiw课程真心不错,分享给大家机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计...
    99+
    2023-01-31
    实战 机器 教程
  • 《深度学习:21天实战Caffe》
    《深度学习:21天实战Caffe》是一本深度学习入门读物。以目前已经大量用于线上系统的深度学习框架Caffe为例,由浅入深,从 Caffe 的配置、部署、使用开始学习,通过阅读 Caffe 源码理解其精髓,加强对深度学习理论的理解,最终达到...
    99+
    2023-06-02
  • python机器学习Sklearn实战adaboost算法示例详解
    目录pandas批量处理体测成绩adaboostadaboost原理案例举例弱分类器合并成强分类器pandas批量处理体测成绩 import numpy as np import...
    99+
    2024-04-02
  • Vue3中Vuex状态管理学习实战示例详解
    目录引言一、目录结构二、版本依赖三、配置Vuex四、使用Vuex引言 Vuex 是 Vue 全家桶重要组成之一,专为 Vue.js 应用程序开发的 状态管理模式 + 库 ,它采用集中...
    99+
    2024-04-02
  • Android ASM插桩探索实战详情
    目录前言ASM的作用是什么?如何使用ASM?基本使用方式自定义ClassVisitorASM ByteCode Viewer如何将ASM运用都我们的实际项目中来?引入工程Androi...
    99+
    2024-04-02
  • Mycat学习实战-Mycat基本功能
    Mycat学习实战-Mycat基本功能学习 mycat mysqlMycat学习实战-Mycat基本功能1. Mycat高可用-读写分离1.1 读写分离配置参数1.2 心跳配置参数2. ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作