mysql查询计划

1:客户端发起查询请求

2:服务器接收到请求后,先查询缓存 如果缓存命中,直接返回数据给客户端 否则,解析sql

3:sql解析完成后,进行预处理

4:有查询优化器生存查询计划

5:通过api接口调用存储引擎 去磁盘访问需要查询的数据,再通过查询执行引擎返回给客户端

值得一提的是:mysql的客户端与服务端通信,采用的是半双工通信,即永远是只有一方在发送数据。

客户端发送完请求后,只能等待服务端的数据返回,这种协议让mysql通信简单快速,但也限制了流量包,在客户端无法

分块的发送请求,而服务端返回的数据,数据量大通常通过分成多个小数据包返回给客户端,客户端也应该注意接收完整的数据包,而不是断点

接收部分,造成数据的丢失。

时间: 2024-10-12 07:42:30

mysql查询计划的相关文章

MySQL查询计划输出列的含义

"一:MySQL查询计划输出列的含义:1.id:每个被独立执行的操作的标识,表示对象被操作的顺序:id值越大,先被执行:如果相同,执行顺序从上到下.2.select_type:查询中每个select子句的类型.3.table:名字,被操作的对象的名称,通常是表名,但有其他格式.4.partitions:匹配的分区信息(对于非分区表值为NULL).5.type:连接操作的类型.6.possible_keys:备选的索引(列出可能被使用到的索引).7.key:经优化器选定的索引:常使用ANALYZE

MySQL查询计划学习

以select_type为线索: 1) SIMPLE:简单的SELECT,不实用UNION或者子查询 mysql> explain select * from t2; +----+-------------+-------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | r

MySQL的查询计划中ken_len的含义

本文首先介绍了MySQL的查询计划中ken_len的含义:然后介绍了key_len的计算方法:最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用. key_len的含义 在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示: mysql> create table t(a int primary key, b int not null, c int not null, index(b)); Query OK, 0 rows affected (0

mysql 从left join 到join到查询计划到联合索引的原理

left join left join在无脑使用中,会大表驱动小表,触发笛卡尔集,效率慢 join会自动小表驱动大表 参考: 从一个MySQL left join优化的例子加深对查询计划的理解 http://luxuryzh.iteye.com/blog/1976004 相关的explain查询计划解释 type分为system/const/eq_ref/ref/range/index/ALL等好几类,连接的效率从前往后 好..> 差 all:木有用到索引 index,用到 range,索引的b

MySQL执行计划解读

MySQL执行计划解读 http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765237.html MySQL执行计划解读 Explain语法 EXPLAIN SELECT -- 变体: 1. EXPLAIN EXTENDED SELECT -- 将执行计划"反编译"成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT -- 用于分区表

MySQL执行计划解读 转他人文章

Explain语法 EXPLAIN SELECT …… 变体: 1. EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT …… 用于分区表的EXPLAIN 执行计划包含的信息 id 包含一组数字,表示查询中执行select子句或操作表的顺序 id相同,执行顺序由上至下 如果是子查询,id的序号会递增,id值越大优先级越高,越

MySQL 执行计划explain详解

MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的. 调用EXPLAIN 在select之前添加explain,mysql会在查询上设置一个标记,当执行查询计划时,这个标记会使其返回关于执行计划中每一步的信息,而不是执行它.它会返回一行或多行信息,显示出执行计划中的每一部

MySQL执行计划显示与执行过程不符合

一 建表和现象的过程如下 CREATE TABLE t1 (id1 INT, a1 INT, b1 INT, PRIMARY KEY(id1));CREATE TABLE t3 (id3 INT UNIQUE, a3 INT, b3 INT); INSERT INTO t1 VALUES (1, 1, NULL);INSERT INTO t3 VALUES (1, 1, NULL); mysql> select * from (select * from t1 where id1 =(selec

MySQL 查询缓存

MySQL查询执行流程 查询流程: 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果:否则,进入下一阶段: 服务器进行SQL解析.预处理,再由优化器生成对应的执行计划: MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询: 将结果返回给客户端: 查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段: MySQL保存结果于缓存中,把select语句本身做hash计算,计算的