目录
简单架构
图中可以看出MySQL主要分为Server层和存储引擎层,其中server层主要包括连接器、查询缓存、分析器、优化器以及执行器等结构,在这些结构中提供了MySQL大多数核心功能,比如存储过程、触发器、视图、函数等,以及所有跨存储引擎层的功能的实现。
存储引擎主要负责数据的存储和读取,提供了多个存储引擎,最常用的如InnoDB、MyISAM等,其中MySQL5.5之后InnoDB成为了默认的存储引擎,不用手动指定。
连接器
操作数据库的第一步就是与数据库建立连接,连接器的作用就进行用户身份验证,包括用户名密码以及用户权限等。用户名和密码验证通过之后,连接会去权限表中查询该用户的权限,此后所有的权限逻辑判断都会用到此时读取的权限信息,也就是说只要连接不断开,就算管理员修改了该用户的权限,该用户也不会受到影响。也就是说修改了某个用户的权限后,需要重新登录才会起作用。
不过当客户端一段时间没有操作后,连接是会断开的,可以通过配置文件的中wait_timeout参数来进行控制,默认是8小时
长连接与短连接
数据库中,长连接就是简历连接后,如果客户端有持续的请求,一直使用同一个连接,短连接是指每次执行完很少的请求后就会断开连接从新建立请求
查询缓存
建立连接后,执行查询语句的时候,会先从缓存中进行查询,如果有直接返回结果,如果没有就会执行下面的操作,完成后也会把结果缓存起来。
MySQL中如果对于经常更新的语句,缓存的有效时间太短,因为只要是对数据进行了更新,之前的缓存就会失效,对于只查询的数据进行缓存还是可以的。不过,MySQL8之后删除了缓存功能。
分析器
分析器主要是分析sql语句是做什么的,包括词法分析和语法分析。
词法分析
一条sql包含多个字符串组成,词法分析就是提取关键字,如select、表名、字段名、查询条件等,做完这些就可以进入语法分析了。
语法分析
主要判断输入的sql是否正确,是否符合MySQL的语法。
优化器
分析器操作完之后就会进入优化器,优化器的作用就是用最优的方案去执行sql,比如决定索引的选择和join的连接顺序等。
执行器
选择执行方案后,MySQL就可以对sql语句执行了,执行之前,还要验证一下用户是都对该表有操作权限,没有就报错返回,有操作权限就去调用存储引擎的接口,返回存储引擎返回的结果集。