explain

mysql select 执行过程查询关键字 explain

空扰寡人 提交于 2019-11-26 14:13:38
语法:explain select .... 变体: 1. explainextended select .... 将执行计划“反编译”成select语句; 运行showwarnings 可以得到被mysql优化器优化后的语句 2. explainpartitions select ... 用于分区表的explain 运行结果含义: type: all ,index,range,ref,eq_ref,const,system null 从左到右,最差到最好; all: full table scan ;mysql将遍历全表以找到匹配的行; index : index scan; index 和 all的区别在于index类型只遍历索引; range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值的行,常见与between ,< ,>等查询; ref:非唯一性索引扫描,返回匹配某个单独值的所有行,常见于使用非唯一索引即唯一索引的非唯一前缀进行查找; eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或者唯一索引扫描; const,system:当mysql对某查询某部分进行优化,并转为一个常量时,使用这些访问类型。如果将主键置于where列表中,mysql就能将该查询转化为一个常量。 possible keys:

Why the rows returns by “explain” is not equal to count()?

烂漫一生 提交于 2019-11-26 08:28:06
问题 mysql> select count(*) from table where relation_title=\'xxxxxxxxx\'; +----------+ | count(*) | +----------+ | 1291958 | +----------+ mysql> explain select * from table where relation_title=\'xxxxxxxxx\'; +----+-------------+---------+- | id | select_type | rows | +----+-------------+---------+- | 1 | SIMPLE | 1274785 | +----+-------------+---------+- I think that \"explain select * from table where relation_title=\'xxxxxxxxx\';\" returns the rows of relation_title=\'xxxxxxxxx\' by index. But