MySQL是怎样运行的:初识MySQL

介绍

《MySQL是怎么运行的》是一本优秀的进阶MySQL读物,我针对该书的每一章都进行了归纳总结,并汇集为一个专栏。本专栏一共有21章,我打算每周更新两到三章。前面章节提到的一些概念如果大家觉得太浅显了,不用着急,后面的章节会娓娓道来。


客户端与服务端连接的过程

TCP、IP:

在真实环境中,客户端进程与服务端进程可能运行在不同的端口上,他们之间必须通过网络进行通信。MySQL服务器默认监听3306端口。

命名管道和共享内存:

如果是windows用户,那么可以考虑在客户端进程和服务器进程之间使用命名管道和共享内存进行通信。需要注意的是,使用共享内存进行通信和服务器进程与客户端进程必须位于同一台windows主机中。

Unix域套接字:

如果服务器进程和客户端进程都运行在类Unix的同一台机器上,则可以使用Unix域套接字进行进程间通信。


服务器处理客户端请求过程

连接管理:

当客户端成功与服务端创建连接后,服务端都会创建一个线程专门处理交互。**当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁而是把它缓存起来。**在另一个新的客户端再进行连接时,把这个缓存分配给新客户端。这样就不用频繁创建与销毁进程,节省开销。但是同时也带来一个问题:**MySQL会为每一个连接的客户端分配一个进程,线程过多会影响性能。**因此我们可以对此进行限制:在客户端发起连接时,需要携带主机信息、用户名、密码等信息,服务器会对这些信息进行认证,成功则建立连接进程,失败则拒绝连接。

解释与优化:

到目前为止,MySQL已经成功获得文本形式的请求接着还有几个重要的过程:查询缓存、语法解析和查询优化

  1. 查询缓存: MySQL会把刚刚处理过的查询请求和结果缓存起来。但是如果两个查询请求有任何字符上的不同(例如:空格、注释、大小写)都会导致缓存不能被命中。另外,如果查询请求中包含某些系统函数、用户自定义变量、函数、系统表,那么这个请求不会被缓存。(例如:调用NOW函数获取当前时间)。缓存也有失效的时候,只要该表的结构或者数据被修改,则与该表相关的所有缓存均失效。
  2. 语法解析: 如果查询缓存没有命中,接下来就要进行正式的查询阶段了。从本质来说,这个从指定的文本中提取出需要的信息算一个编译过程,涉及词法解析、语法解析、语义分析等阶段。
  3. 查询优化: 有时我们写的MySQL语句执行起来的效率可能并不高,MySQL的优化程序会对我们的语句做一些优化。如外连接转换为内连接、表达式简化、子查询转换为连接等。

存储引擎

为了方便管理,人们把MySQL服务器处理请求的过程简单地划为了serve层和存储引擎层,不涉及真实数据存取的功能划为serve层,存取真实数据的功能划分为存储引擎层。serve层在判断某条记录符合要求之后,先将其发送到一个缓冲区,待该缓冲区满了,才向客户端发送真实的请求的记录。常见的存储引擎有InnoDB、MyISAM,偶尔还会用一下Memory。其中InnoDB支持事务、外键、行级锁。它在5.5.5版本成为默认的存储引擎。

在这里插入图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值