背景

用了那么长时间的MySQL,sql语句相信早已烂熟于心,于是,我就试着去了解它的执行原理,以下是我学习过程中的总结要点。

只要是B/S架构,都是会有客户端与服务端,mysql也不例外。

首先客户端发出一个请求,这个请求就是一个查询请求(Select),而它请求的对象就是服务端,服务端是怎么处理这项查询功能的呢?

逻辑分层

首先可以把服务端想象成一个大的容器,里面有四层结构,当一个请求过来后,将会执行这四层,执行一遍后才会返回给我们想要的结果。

第一层 :连接层

也就是说,我们客户端发送一个Select是直接交给连接层来处理,而它的作用就是提供与客户端连接的服务

连接层只是与客户端建立起连接,并且拿到我们的请求(Select),但是它本身不做处理,因为它只做连接,那谁来处理呢?接着往下走。

第二层:服务层

服务层可以干两件事情:

1.提供给用户各种可以使用的接口

比如说刚才的查询就是,我们常见的CRUD(增删改查)操作都在这里,连接层拿到这个Select直接了给了服务层,这里除了给用户提供接口以外,还提供了一个声称为Sql优化器的东西

2.Sql优化器(MySQL QUery Optimier)

当我们编写Sql语句执行时,执行到这里后(第二层),优化器会觉得我写的sql语句性能不够好,这个时候,优化器会自己写一个等价于跟我写的执行后结果一致的sql语句进行代替,这个等价写法就是通过这个优化器把你写的sql给优化了,因为它觉得你写的性能太低了,所以它就把你写的sql给优化了一下,这个优化操作就是优化器干的事情;

很明显,优化器可以将sql语句进行优化,它是可以对性能产生一定的好处,但是有弊端!举个例子:

当你自己优化时是a,但是实际执行并不是a,因为优化器会觉得你优化的还是不够好,结果把a变成b了,也就说,我明明写的是a,但程序执行的是b

这会对我们开发过程造成混乱,因为它已经被优化了。你写的跟之前的已经不是一致的了

第三层:引擎层

它提供了各种存储数据的方式,常见的有:lnnoDB、MylSAM

重点区别:

lnnoDB 【Mysql默认】:它在设计的时候,它是事物优先 【适合高并发操作】原理:因为它是行锁,我每一条数据都要锁,锁的太多,性能就降低了,虽然性能降低了,但是我适合高并发了,就不容易出错了

MylSAM:性能优先 原理:因为它是表锁,对于表里面的十条数据来说是不受影响的,对十条锁一次就完了,所以性能快

性能优先就很好理解了,比如说一万条数据,它处理的快一点,效率会高一点

事物就是防止一些并发操作,并发太大可能出错,所以适合高并发操作

所以在做项目的时候,建立数据库时,如果性能优先,就选择MylSAM引擎,如果是高并发操作,就选择lnnoDB 引擎;如何更换引擎我下面会讲

第四层:存储层

这就很好理解了,最终的数据在存储层里面存储

说完四层后,我们来厘清思路

首先客户端发出一个Select操作--->连接层接收后给服务层--->服务层对你的查询进行一个优化,并把优化结果给引擎层--->选择当前数据库的引擎,选完引擎后,引擎将最终的数据交给了存储层--->存储层,用存储层来存数据

查看引擎

show engines;查看Mysql所支持的所有引擎

执行结果:

yes就是支持,在InnoDB支持选项是DEFAULT(默认)也就说明,当我们创建数据库的时候默认引擎就是InnoDB

查看当前数据库使用的引擎

show variables like '%storage_engine%';

执行结果:

很显然,我们目前用的就是InnoDB

指定数据库对象的引擎

我现在创建一张表,这个张表我不用InnoDB,用MylSAM,因为我想让它性能优先,下面我就使用mysql命令行进行创建表

1.指定数据库指令:use 数据库名

2.在指定的数据库中创建一张简单的表

create table tb(

id int (4),

name varchar(5),

primary key(id)

)ENGINE=MyISAM;

执行结果:

表明创建成功,并且该表的引擎是指定的我们手动指定的引擎,而不是默认的。

今日感悟:

不要认为工作后只要努力就够了,如何跟同事和老板相处,甚至比努力工作更重要,

在职场上,你的去留20%是自己决定的,40%是老板决定的,剩下的%40叫排挤

所以,职场礼仪很重要!

业余时间赚点零花钱点这里

MySQL执行原理,逻辑分层、更改数据库处理引擎相关推荐

  1. Hive体系结构(二)Hive的执行原理、与关系型数据库的比较

    Hive体系结构(一)架构与基本组成 Hive体系结构(二)Hive的执行原理.与关系型数据库的比较 Hive体系结构(三)元数据库与基本操作 Hive体系结构(四)注意事项与扩展特性 1. Hive ...

  2. 从 MySQL 执行原理告诉你:为什么分页场景下,请求速度非常慢?

    从一个问题说起 五年前在腾讯的时候,发现分页场景下,mysql请求速度非常慢.数据量只有10w的情况下,select xx from 单机大概2,3秒. 我就问我师父为什么,他反问"索引场景 ...

  3. Mysql 查看、创建、更改 数据库和表

    一.一探究竟 我想看看有多少个数据库,有多少个表,以及表里有啥东西.那么你可以这样: 图形界面: 命令: 查看多少个数据库:注意 后面带s #查看 SHOW DATABASES; #查看表 USE b ...

  4. mysql字符集和表字符集_Mysql数据库表引擎与字符集

    Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理 ...

  5. 阿里云mysql端口管理_怎样更改数据库端口号

    如何避免数据库"勒索事件"和"从删库到跑路"的尴尬 摘要:8月24日,阿里云数据库技术峰会到来,本次技术峰会邀请到了阿里集团和阿里云数据库老司机们,为大家分享了 ...

  6. 【图文动画详解原理系列】1.MySQL 索引原理详解

    MySQL简介 MySQL是一个开放源代码的关系数据库管理系统.原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用.2008年MySQL ...

  7. 解决DBeaver无法查看MySQL执行计划问题

    解决DBeaver无法查看MySQL执行计划问题 DBeaver这个数据库连接工具的确很好用,但是最近在使用时发现它不能查看MySQL的执行计划 explain execute select * fr ...

  8. 如何改变数据库存储引擎

    更改数据库存储引擎 1:查看系统支持的存储引擎 > show engines; 2:查看表使用的存储引擎: > show table status from `databases_name ...

  9. MySQL 整体架构与 SQL 执行原理,数据库事务原理

    起 一个查询语句的例子 在执行下面这个查询语句时的执行的流程是怎么样的? mysql> select * from t where id=1: 执行器的执行流程是这样的: 1.调用 InnoDB ...

最新文章

  1. Jquery调用webservice
  2. mysql两张表一起计数_mysql-同一张表上的多个联接,其中一个查询计数
  3. FFmpeg命令的几种应用
  4. Cover开启投票是否对Yearn漏洞提供保险
  5. python模块使用手册_Python中文手册-Python模块
  6. 纯js油猴插件版GUI页面助手
  7. 运用SMART法制定恰当的目标
  8. 如何免费将PDF文档压缩到最小?
  9. 从韩国的大数据之殇,看技术的产业价值与功能价值
  10. Cydia怎样添加威锋源
  11. 二分查找的平均查找长度
  12. 17.10.21B组题解
  13. 地下迷宫探索 java_Java 8:探索可能性
  14. 【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码
  15. 2022年国自然正式放榜,如何解读基金立项结果?(附查询方法)
  16. 第一段代码 打开了新世界的大门
  17. 局域网内部管理行为应该如何控制?
  18. Cyanine7 NH2|分子式C43H60Cl2N4O|分子量719.87|保存条件
  19. 中望软件ZW3D,数码大方CAXA实体设计,华云三维CrownCAD,建议开设 春/夏/秋/冬四季CAD学校,助力软件普及
  20. 8.旭日图+热力地图

热门文章

  1. 采访 | Dou. 愿你背着相机出行,归来仍是少年。
  2. 25、【华为HCIE-Storage】--Hyper Snapshot(文件业务)
  3. 专家:我国青少年网络安全立法还需完善
  4. 配置sql server 2000以允许远程访问
  5. 网站外链数量的变化可以从哪几点去理解
  6. 非常不错的sharepoint webpart工具集
  7. SharpMap分析手记
  8. MySQL高级 - 日志 - 二进制日志(row及日志删除)
  9. MySQL高级 - 查询缓存 - 配置参数
  10. 探究Jvm源码实现-MarkWord