MySQL一条查询语句是如何执行的

MySQL的基本架构大致能够分为server层和存储引擎层,逻辑架构图以下:sql

Server层除了图中显示的,还包括全部的内置函数(包括日期、时间、数学和加密函数等),存储过程、触发器、视图等跨存储引擎的功能都在这层实现。数据库

存储引擎层负责数据的存储和提取,支持InnoDB、MyISAM、Memory等,从MySQL 5.5.5版本开始InnoDB成为默认的存储引擎。缓存

  1. 链接器架构

    链接器负责跟客户端创建链接、获取权限、维持和管理链接。数据库里面的链接分为长链接和端链接,和tcp的链接相似。长链接过多会占用内存太大,从而出现OOM。能够考虑按期断开长链接,尤为是执行过一个占用内存的大查询;5.7版本之后能够执行 myssql_reset_connection来从新初始化链接资源。tcp

  2. 查询缓存函数

    执行查询语句时,若是以前执行过那么语句和结果可能会以key(语句)-value(结果)直接缓存在内存中。优化

    不建议使用查询缓存,由于只要有一个表更新,那么这张表上全部查询缓存都会被清空。8.0版本后删除了此功能。加密

  3. 分析器spa

    分析器对SQL语句作解析,先作词法分析,例如‘“select”-->查询语句;再作语法分析。server

  4. 优化器

    表里多个索引决定用哪一个或者关联查询时决定表的链接顺序

  5. 执行器

    • 先判断用户对表T有没有执行权限,没有则返回错误
    • 有就调用指定引擎提供的接口,一行一行遍历表,将全部知足条件的行组成的记录集做为结果返回给客户端

   - - MySQL实战45讲笔记一