MySQL架构
逻辑架构图
MySQL执行流程图
MySQL主要分为Server层和存储引擎层
Service层:
连接器:主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作
查询缓存:建立连接,执行查询语句,会先查询缓存,Mysql会先校验这个sql是否执行过,以
的键值的形式缓存在内存中,键是查询预计,值是结果集。如果缓存键被命中,就会直接返
回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一
次调用。不建议使用缓存
分析器:mysql 没有命中缓存,那么就会进入分析器.
第一步,词法分析,一条SQL语句有多个字符串组成,首先要提取关键字,比如select,
提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。
第二步,语法分析,主要就是判断你输入的sql是否正确,是否符合mysql的语法。
优化器:优化器的作用就是它认为的最优的执行方案去执行(虽然有时候也不是最优),比
如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等
执行器:当选择了执行方案后,mysql就准备开始执行了,首先执行前会校验该用户有没有
权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,
返回接口执行的结果。
存储引擎层:
主要负责数据的存储和读取,采用可以替换的插件式架构,支持InnoDB、MyISAM、
Memory等多个存储引擎,其中InnoDB引擎有自有的日志模块redolog 模块
MySQL索引
什么是索引?
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含
着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,
能加快数据库的查询速度。
索引分类:
①单列索引:一个索引只包含单个列,一个表可以有多个单列索引
②组合索引:一个索引包含多个列
索引的使用
创建索引
create index indecName on tableName(userName(length))’
修改索引
alter table tableName add index indexName(columnName)
删除索引
drop index indexName on tableName