通过结果中的key_len=4可推断出查询使用了第一个列:film_id列来执行索引查找。mysql> explain select * from film_actor where film_id = 2;key_len计算规则如下: 字符串 char(n):n字节长度 varchar(n):2字节存储字符串长度,如果是utf-8,则长度 3n + 2 数值类型 tinyint:1字节 smallint:2字节 ...
unique_subquery:该类型替换了下面形式的IN子查询的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。index_subquery:该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引: value IN ...
SQL 优化测试 创建一个有索引的表 create table students ( sid int, sname varchar(64), gender int, dept_id int, primary key(sid) ); 创建一个什么索引都没有的表 create table students_noindex ( sid int, sname varchar(64), gender int, dept_id int ); 利用存储过程, 分别给有索引的表和没...
PRIMARY KEY (`id`), KEY `idx_film_actor_id` (`film_id`, `actor_id`) ) ENGINE = InnoDB CHARSET = utf8。 INSERT INTO `film_actor` (`id`, `film_id`, `actor_id`) VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1)。 2.2 使用explain分析sql语句 1 mysql> explain select * from...
Explain被称为执行计划,在语句之前增加 explain 关键字,MySQL会在查询上设置一个标记,模拟MySQL优化器来执行SQL语句,执行查询时,会返回执行计划的信息,并不执行这条SQL。(注意,如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。 Explain可以用来分析SQL语句和表结构的性能瓶颈。通过explain的结果,可以...
const 表示通过索引一次就找到了,const用于比较primary 或者 unique索引。 eq_ref 唯一性索引扫描 对于每个索引键,表中只有一条记录与之匹配, 常见于主键或唯一索引扫描 ref 非唯一性索引扫描。 range 只检索给定范围的行,使用一个索引来选择行 一般就是在你的where语句中出现between<>\ in等查询。
1 select_type: SIMPLE table: users partitions: NULL type: const possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: const rows: 1 filtered: 100.00 Extra: NULL 1 row in set, 1 warning (0.00 sec) 一共12个字段,各个字段的含义如下: id: 每一个查询语句都会生成标识符执行顺序是id从大到小...
通过查看MySQL优化的执行sql,可以看到MySQL将in子查询优化为了exist语句,并且在主键索引上进行了等值查询。MySQL优化后的语句:/* select#1 */ select `dbs`.`t2`.`id` AS `id`,`dbs`.`t2`.`key2` AS `key2` from `dbs`.`t2` where (<in_optimizer>(`dbs`.`t2`.`key2`,<exists>(<primary_...
const:表示通过索引一次就找到了,const用于比较primary key或unique索引,常见于主键或唯一索引扫描 eq_ref:唯一索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描。 ref:非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会...
我们平时sql调优的时候,一般得保证查询至少达到range级别,最好能达到ref。System :只有一行记录,这是const类型的特列,开发中可以说不会出现。Const:通过一次索引就找到,const用于比较primarykey或者unique索引。因为只匹配一行数据,所以将主键放到where后查询,MySQL就能将该查询转换为一个常量。eq_ref:唯一性索引...