mysql分为两层部分——server层和存储引擎层
server层
涵盖大多数核心服务,以及所有内置函数。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图
连接器——负责客户端连接、获取权限、维持和管理连接
登录mysql的两种方式见——mysql(一)(安装、登录)
建立连接之后,如果没有后续操作,该链接就处于空闲状态。使用命令
show processlist
可以查看到空闲状态的链接处于sleep状态
数据库的长连接和短连接
- 长连接——连接成功之后,客户端持续有请求,则一直使用同一个连接
- 短连接——每次执行完很少的几次查询就断开连接,下次查询再重新建立一个
如何解决长连接过多导致mysql占据内存过大的问题
查询缓存——mysql8.0彻底废弃该功能
支持select语句时,首先查看查询缓存,如果之前查询过相同的语句,则查询结果会以key-value的形式存储在查询缓存中。在查询缓存中找到了对应的查询结果,就不用再去数据库中进行查询了。如果查询缓存中没有找到对应的结果,则进行后续的查询,并将查询结果存储到查询缓存中,用以方便后续的其他查询过程。
但是不建议使用查询缓存,因为
- 查询缓存失效十分频繁——数据更新会导致查询缓存失效
- 查询缓存命中率不高
分析器
分析器会首先对查询语句进行词法分析。你输入的是由多个字符串和空格组成的一条sql语句,mysql将识别出字符串分别是什么,代表什么
之后进行语法分析,判断输入的sql语句是否满足mysql语法
优化器
优化器在表中存在多个索引的时候,对使用哪一个索引进行选择。
在一个语句有多表关联(join)的时候,决定各个表的连接顺序
执行器
执行器进行执行前,会先判断你有没有执行权限。执行器的执行过程如下:
存储引擎层
存储引擎负责数据的存储和提取,其架构模式是插件式的,支持innodb、myisam、memory等多的存储引擎。
在create table时,可以指定存储引擎(engine=memory),如果不指定,则使用默认的innodb作为存储引擎。