Mysql进阶学习笔记(一)

借鉴掘金小册,小孩子4919MySQL是怎样运行的:从跟上理解MySQL

MySQL复习


MySQL客户端服务器架构

MySQL服务器:与存储数据打交道,对客户端发来的SQL语句进行解析。

MySQL客户端:需要用户名和密码登录。

MySQL使用流程:1.启动MySQL服务器2.启动MySQL客户端3.客户端对服务器发送请求

启动后MySQL服务器进程的默认名称为mysqld,客户端名称为mysql。

MySQL的客户端和服务器使用TCP作为网络通信协议,MySQL服务器启动时会默认申请3306端口,之后等待客户端进行连接,也可以自行指定端口比如,

mysqld -P3307

这样MySQL服务器在启动时就会监听指定的3307端口。

客户端想指定连接的MySQL服务器可以-h指定IP地址,-P指定端口

mysql -h127.0.0.1 -uroot -P3307 -p

MySQL客户端发送一段SQL语句,MysSQL服务器返回一段文本的大致过程为

主要分为:连接管理、解析与优化、存储引擎三部分。

连接管理

MySQL服务器当收到MySQL客户端的连接请求时,会创建一个线程专门与这个客户端进行交互,当这个客户端断开连接时,它不会立即销毁线程,而是把它缓存起来,当另一个客户端连接时直接分配给在这个客户端,但是线程分配太多会影响性能,所以MySQL服务器可以限制连接的客户端数量。

MySQL服务器请求连接中会带有主机信息,用户名,密码。MySQL服务器会对这些进行认证,如果认证失败服务器会拒绝连接。

 

解析与优化

这部分比较重要的分别是查询缓存、语法解析和查询优化。

查询缓存

如果A客户端查询一条信息服务器会将查询请求和结果缓存起来,当其他用户发送相同请求时会直接返回。

但是查询缓存要求查询语句完全相同,甚至包括空格、大小写、注释,而一些系统表的数据也不会缓存,比如Now()每次都返回不同结果。

当查询请求访问的表被insert、update、drop、truncate、drop database时,缓存会全部删除

小贴士: 虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。

语法解析

判断语法是否正确,本质上是以一个编译的过程,把查找表和信息放到MySQL服务器上。

查询优化

优化程序会对语句做一些优化,如外连接转换为内连接、表达式简化、子查询转为连接吧……

 

存储引擎

逻辑上表是一行一行记录的,但是物理上是由存储引擎控制的,它控制怎么把数据写入具体的物理存储器上,怎么从表中读数据,MySQL也提供了多种应对不同需求的存储引擎。

MySQL支持非常多种存储引擎,我这先列举一些:

存储引擎描述
ARCHIVE用于数据存档(行被插入后不能再修改)
BLACKHOLE丢弃写操作,读操作会返回空内容
CSV在存储数据时,以逗号分隔各个数据项
FEDERATED用来访问远程表
InnoDB具备外键支持功能的事务存储引擎
MEMORY置于内存的表
MERGE用来管理多个MyISAM表构成的表集合
MyISAM主要的非事务处理存储引擎
NDBMySQL集群专用存储引擎

InnoDB是MySQL默认的存储引擎 。

查看存储引擎

show engines

创建表时设置存储引擎

CREATE TABLE aaa(i int)ENGINE=存储引擎(InnoDB);

修改表的存储引擎

ALTER TABLE aaa ENGINE=MyISAM;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值