MySQL知识点

MySQL逻辑架构

输入图片说明

MySQL整个逻辑架构总体分为三层:mysql

  • 客户端层,最上层,不是MySQL独有,例如链接处理、受权认证、安全等
  • 核心服务层,包括查询解析、分析、优化、缓存、内置函数等,还有存储过程、触发器、视图等
  • 存储引擎,最下层,负责MySQL中数据的存储和提取

MySQL查询过程

若是但愿MySQL提升查询性能,最好的办法是弄清楚MySQL是如何优化和执行查询的,就会发现:不少的查询优化工做,实际上就是遵循一些原则,让MySQL的优化器可以按照预想的合理方式运行而已sql

输入图片说明

客户端与服务端通讯协议

MySQL客户端与服务端的通讯协议是“半双工”的:任意时刻,要么是服务端向客户端发送数据,要么是客户端向服务器发送数据,这两个动做不能同时发生,因此咱们没法也无须将一个消息切成小块独立发送,也没有办法进行流量控制。缓存

查询缓存

在解析一个查询语句前,若是查询缓存是打开的,那么MySQL会检查这个查询语句是否命中缓存中的数据。若是当前查询刚好命中查询缓存,这种状况下,查询不会被解析,也不会生成执行计划,更不会执行。安全

若是查询语句中包含任何用户自定义函数、存储函数、用户变量、临时表或者MySQL库中的系统表,其查询结果不会被缓存。服务器

在任何的写操做时,MySQL必须将对应表的全部** **。若是查询缓存不少或者碎片不少时,这个操做可能带来很大的系统消耗,甚至致使系统僵死一会。并且查询缓存对系统的额外消耗也体如今读操做。架构

语法解析和预处理

语法解析

MySQL经过关键字将SQL语句进行解析,并生成一颗对应的解析树,该过程,解析器主要经过语法规则来验证和解析,好比SQL中是否使用了错误的关键字或者关键字的顺序是否正确等。函数

预处理

预处理,根据MySQL规则进一步检查解析树是否合法,好比检查要查询的数据表或列是否存在等。性能

查询优化

多数状况下,一条查询能够有多种执行方式,都返回相应的结果。优化器的做用,是找到其中最好的执行计划。优化

MySQL使用基于成本的优化器,它尝试预测一个查询使用某种执行计划时的成本,并选择其中成本最小的一个。能够经过查询当前会话的last_query_cost的值来获得其计算当前查询的成本。如:设计

mysql>select * from t_msg limit 10;

mysql>show status like 'last_query_cost';

查询过程总结

  • 客户端向MySQL服务器发送一条查询请求
  • 服务器首先检查查询缓存,若是缓存命中,则马上返回缓存中的数据。不然进入下一阶段
  • 服务器进行SQL解析、预处理,再由优化器生成对应的执行计划
  • MySQL根据执行计划,调用存储引擎的API进行数据查询
  • 将结果返回给客户端,同时缓存查询结果

知识点

  1. 当查询语句很长时,须要设置max_allowed_packet参数
  2. 服务端响应给客户端的数据,由多个数据包组成。在实际开发中,尽可能保持查询简单且只返回必须的数据,减少通讯间数据包的大小和数量是一个很是好的习惯,这也是查询中尽可能避免使用SELECT * 以及加上LIMIT限制的缘由之一。
  3. 用多个小表代替一个大表,可是不要过分设计
  4. 批量插入,代替循环单条插入
  5. 能够经过SQL_CACHE和SQL_NO_CACHE来控制某个查询语句是否须要进行缓存
相关文章
相关标签/搜索