2.关联表查询,idx_film_actor_id是film_id和actor_id的联合索引,这里使用到了film_actor的左边前缀film_id部分。mysql> explain select film_id from film left join film_actor on film.id = film_actor.film_id;range 范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定...
Explain被称为执行计划,在语句之前增加 explain 关键字,MySQL会在查询上设置一个标记,模拟MySQL优化器来执行SQL语句,执行查询时,会返回执行计划的信息,并不执行这条SQL。(注意,如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。 Explain可以用来分析SQL语句和表结构的性能瓶颈。通过explain的结果,可以...
Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。range checked for each record (index map: #):MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知...
额外信息(Extra):Extra列提供了额外的执行信息,如Using where、Using index、Using temporary等,这些信息可以帮助理解查询的具体执行情况。 4. 注意优化常见的不走索引等慢sql: -- 索引的最左匹配原则 * : 指在使用复合索引(Composite Index)时,索引的多个列按顺序组成了索引键。当你查询时,可以利用索引中...
用法:EXPLAIN+ sql语句 EXPLAIN执行后返回的信息如下: 各个字段的大致含义如下: id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符。 select_type: SELECT 查询的类型。 table: 查询的是哪个表。 partitions: 匹配的分区。 type: join 类型。
唯一性索引扫描,对于每一个索引键,表中只有一条记录与之匹配,常用于主键或唯一索引扫描;此类型通常出现在多表的 join 等值查询,表示对于前表的每一个结果,都只能匹配到后表的一行结果,查询效率较高。 举例:索引为 id 主键和一个复合索引(实际未使用),SQL 为 ...
EXPLAIN SELECT * FROM `tb_student` WHERE id IN (SELECT stu_id FROM tb_class WHERE tea_id IN(SELECT id FROM tb_teacher WHERE `name` = '马老师')); 根据原则,当id不同时,SQL从大到小执行,id相同则从上到下执行。 二、select_type 表示select查询的类型,用于区分各种复杂的查询,例如普通查询,...
2 rows in set, 1 warning (0.00 sec) 第三,type 栏为"ref" ref 和eq_ref 类似,不同的是两表的JOIN KEY 非主键、非唯一索引。 这种场景从SQL角度来讲,应该避免掉;如果实在无法避免,可以想办法减少两表JOIN的记录数。 那对SQL2 做些调整,变为SQL 3: JOIN 条件变为字段r1,并且同时给两表字段r1加索引...
在我们的日常开发中,经常会碰到优化SQL的时候或者分析慢SQL的详细情况,而这个时候最常用的方法就是使用explain来分析SQL语句,对于explain的使用方法和详细结果到底应该怎样查看呢? 1.使用方法 explain + sql语句 2.作用 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表...
2 rows in set, 1 warning (0.00 sec) 第三,type 栏为”ref” ref 和eq_ref 类似,不同的是两表的JOIN KEY 非主键、非唯一索引。 这种场景从SQL角度来讲,应该避免掉;如果实在无法避免,可以想办法减少两表JOIN的记录数。 那对SQL2 做些调整,变为SQL 3: JOIN 条件变为字段r1,并且同时给两表字段r1加索...