对于一条查询sql来说,不同的查询类型虽然结果可能是一样的,但是其性能却可能天差地别。不同类型性能从强到差:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all。建议大家在平时书写sql时,多用explain进行分析,尝试去优化代码,...
use index:表示相应的select中使用了覆盖索引,避免访问了表的数据行, 效率很好 using where:表明使用了where过滤。 using join buffer:使用了连接缓存。 3. 分析常见问题和优化建议 在分析EXPLAIN输出时,可以根据以下常见问题和优化建议进行评估: 全表扫描(ALL):如果type列显示为ALL,表示查询执行全表扫描,这通常是性...
在SQL执行计划中,联接类型(type)列表示了两个表之间的连接方式。其中,index和ref是两种不同的联接类型。 index联接是一种较为高效的连接方式,它通常会利用到索引来快速地定位匹配的行。这意味着在连接的过程中,数据库会利用索引来快速地找到匹配的记录,从而提高了查询的效率。 相比之下,ref联接会根据被连接的...
actor.name没有索引,此时创建了张临时表来distinctmysql> explain select distinct name from actor;film.name建立了idx_name索引,此时查询时extra是using index,没有用临时表mysql> explain select distinct name from film;Using filesortmysql 会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。此时mys...
CREATE INDEX index_name ON table_name (column_name) 大多数情况下,index会被自动调用。 可以通过explain select XXX来查看语句中,index的使用情况。(explain只能看select) 最主要看的就是type这一列。 type:表示MySQL在表中找到所需行的方式,或者叫访问类型,常见类型如下(从上到下,性能由差到好) ...
A:system:表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index B:const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫做唯一索引扫描 C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据...
Using index:索引覆盖。直接通过索引就可以获取查询的数据。 Using where:需要回行。在查找使用索引的情况下,需要回表去查询所需的数据 Using sort_union、Using union、Using intersect:这些函数说明如何为index_merge联接类型合并索引扫描。 通过相乘EXPLAIN输出的rows列的所有值,可以粗略地知道MySQL必须检查多少行以执行...
Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查 询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。二. 结语 最后在这里对本文核心要点进行总结:本节讲了如何使用EXPLAIN执行计划进行SQL语句分析,判断SQL语句哪里慢。比较重要...
对于SELECT语句, EXPLAIN可以显示的其他执行计划的警告信息。 explain详解 explain的语法: {EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CONNECTION connection_id}