我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL实战45讲学习笔记---基础架构

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL实战45讲学习笔记---基础架构

    今天开始把《MySQL实战45讲》的知识做一笔记,在加深印象的同时,希望对其它人也有所帮助。

   大体来说,Mysql可分为Server层和存储引擎层两大部分,如图:

 其中,Serve层包括连接器、查询缓存、分析器、优化器、执行器以及所有的内置函数(如:日期时间函数等);存储引擎层负责数据的存储和提取,支持InnoDB、MyISAM等多个存储引擎。现在学用的就是InnoDB,从Mysql 5.5.5版本开始InnoDB成为了默认的存储引擎。

  • 连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般这么写:

mysql -h$ip -P${port} -u${username} -p

输入上面命令,再根据提示你输入密码后就可以连接上Mysql了。我们可以在mysql里面执行以下命令查看连接

show processlist

如图:

可看出现在有两个Mysql连接,每一个连接Command栏显示为“Sleep”,Time显示60,表示这个连接处理空闲状态,已经空闲了60秒,如果客户端长时间没有动静,连接器就会自动将它断开,这个时间默认是8小时,由参数 wait_timeout来控制,如图:

   数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接,短连接是指每次执行完很少的几次查询就断开连接,下次查询再重新建产一个,由于建产连接的过程是比较复杂的,所以建议尽量使用长连接。

  但全部使用长连接之后,你可能会发现,有些时候Mysql占用内存涨得特别快,这是因为Mysql在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会连接断开时才释放。所以如果长连接累积下来,可能导致内存点用太大,被系统强行杀掉(OOM),从现在看就是Mysql异常重启了。

  解决这个问题有两种方案:

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

 

  • 查询缓存

  建立连接后,你就可以执行select语句了,mysql收到查询请求后,会在查询缓存中看之前是不是执行过这条语句。之前执行的语句及结果可能会以key-value的形式被直接缓存在内存中,key是查询的语句,value是查询的结果。如果查询语句能在缓存中直接找到key,那么就把这个value直接返回给客户端。

  但在大多数情况下,不建议使用查询缓存,因为查询缓存失效非常频繁,只要有对一个表的更新,这个表上的所有查询缓存都会被清空。你可以将参数query_cache_type设置成DEMAND。

  1. query_cache_type=OFF 关闭查询缓存
  2. query_cache_type=ON,开启查询缓存,缓存所有结果,除非select语句使用SQL_NO_CACHE禁用查询缓存
  3. query_cache_type=DEMAND,只缓存select语句中通过SQL_CACHE指定需要缓存的查询

这样对于默认的SQL都不使用查询缓存,对于你确认要使用查询缓存的语名,可以用SQL_CACHE显示指定如:

select SQL_CACHE * from T where id=1;

注意:Mysql8.0版本直接将查询缓存的整个功能都删除了,彻底没有这个功能了。

  • 分析器

分析器会先对SQL语句做词法分析与语法的分析,如果SQL语句不对,就会收到"You have an error in your SQL syntax"的错误提醒。

  • 优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引或者是在一个语句有多个关联(join)的时候,决定各个表的连接顺序。

  • 执行器
select * from T where id=1;

执行器的流程如下:

调用InnoDB引擎接口取这个表的第一行,判断ID是不是1,如果不是则跳过,如果是则将这行存在结果集中。重复这样的操作,直到取到这个表的最后一行。执行器将遍历过程中所有满足条件的行组成的记录集返回给客户端。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL实战45讲学习笔记---基础架构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL实战45讲学习笔记---基础架构

今天开始把《MySQL实战45讲》的知识做一笔记,在加深印象的同时,希望对其它人也有所帮助。    大体来说,Mysql可分为Server层和存储引擎层两大部分,如图:  其中,Serve层包括连接器、查询缓存、分析器、优化器、执行器以及所有的内置函数(如:
MySQL实战45讲学习笔记---基础架构
2015-08-21

01.MySQL实战45讲学习笔记---基础架构

今天开始把《MySQL实战45讲》的知识做一笔记,在加深印象的同时,希望对其它人也有所帮助。    大体来说,Mysql可分为Server层和存储引擎层两大部分,如图:  其中,Serve层包括连接器、查询缓存、分析器、优化器、执行器以及所有的内置函数(如:
01.MySQL实战45讲学习笔记---基础架构
2015-11-25

20200618_MySQL实战45讲_学习笔记_Order by

表结构 -- auto-generated definitioncreate table product_application_config( id bigint auto_increment primary ke
20200618_MySQL实战45讲_学习笔记_Order by
2020-10-17

Mysql实战45讲学习详情-

大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。    select * from T where ID=10;这条查询语句的执行过程:外部层:  用户与server层交互的媒介    一.客户端【用于连接数据库,输入命令/语句】     
Mysql实战45讲学习详情-
2021-01-25

MySQL实战45讲之基础篇 - flowers

本文主要记录学习MySQL实战45讲之基础篇过程中一些新的收获,以及总结主要内容。其中包括SQL如何运行、日志系统、事务隔离、索引和锁等。 前言本文主要记录学习MySQL实战45讲之基础篇过程中一些新的收获,以及总结主要内容。其中包括SQL如何运行、日志
MySQL实战45讲之基础篇 - flowers
2016-05-09

MySQL学习笔记——基础与进阶篇

目录  一、###MySQL登录和退出   二、###MySQL常用命令   三、###MySQL语法规范   四、###基础查询   五、###条件查询   六、###排序查询   七、###常见函数的学习   八、###分组查询   九、###连接查询  
MySQL学习笔记——基础与进阶篇
2017-06-14

mysql学习笔记一 基础知识及DDL

规范 一条语句要以分号(;)结束 sql可以单行和多行书写,一般通过缩进和换行书写提高代码可读性 sql的关键词一般都要全大写 分类 DDL(Data Defination Language)  数据定义语言  用于操作数据库常用对象,例如数据库 表格等,常
mysql学习笔记一 基础知识及DDL
2019-12-24

mysql学习笔记一 基础知识及DDL,DML

规范 一条语句要以分号(;)结束 sql可以单行和多行书写,一般通过缩进和换行书写提高代码可读性 sql的关键词一般都要全大写 分类 DDL(Data Defination Language)  数据定义语言  用于操作数据库常用对象,例如数据库 表格等,常
mysql学习笔记一 基础知识及DDL,DML
2022-01-14

编程热搜

目录