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';