执行后,MySQL 会返回一个包含多个字段的结果,包括id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra等。 步骤4: 解读执行计划中的信息 在结果集中,我们特别关注EXTRA列。我们在这里重点讨论Using temporary: Using temporary: 这个信息表明 MySQL 在执行过程中使用了临时表。这通常发生在...
Extra是Using temporary说明,需要建立临时表(temporary table)来暂存中间结果。这类SQL语句性能较低,往往也需要进行优化。典型的,group by和order by同时存在,且作用于不同的字段时,就会建立临时表,以便计算出最终的结果集。六、【Using join buffer (Block Nested Loop)】实验语句:explain select * from user ...
MySQL临时表分为两种:外部临时表、内部临时表。用户通过CREATE TEMPORARY TABLE创建的是外部临时表。SQL 语句执行过程中 MySQL 自行创建的是内部临时表,explain 输出结果的 Extra 列出现了Using temporary就说明 SQL 语句执行时使用了内部临时表。 为了描述方便,本文后续内容中临时表和内部临时表意思一样,都表示 SQL 语...
Extra为Using filesort说明,得到所需结果集,需要对所有记录进行文件排序。 这类SQL语句性能极差,需要进行优化。 典型的,在一个没有建立索引的列上进行了order by,就会触发filesort,常见的优化方案是,在order by的列上添加索引,避免每次查询都全量排序。 五、【Using temporary】 实验语句: explain select * from u...
一、extra 二、extra实例 1、Using temporary 使用了临时表 EXPLAIN select * from myshop.ecs_users where user_id in ( select user_id from myshop.ecs_users where user_id =1 union select user_id from myshop.ecs_users where user_id =2); ...
【Extra列】 顾名思义,这一列表明的是额外信息,这一列的取值对优化SQL非常有参考意义。常见的重要取值如下: 1)using index:所有被查询的字段都是索引列(称为覆盖索引),并且where条件是索引的前导列,出现这样的结果,是性能高的表现。 explainselect group_id,group_name from t_group; ...
出现using temporary的原因是因为MySQL在执行查询时需要创建临时表来存储部分结果集,通常是因为查询中包含了ORDER BY或GROUP BY等操作需要对数据进行排序或分组。 要解决这个问题,可以尝试以下几种方式: 优化查询语句:尽量避免在查询中使用不必要的排序和分组操作,可以考虑优化查询条件、创建索引等方式来提高查询性能。
如果Extra值为Using where或者Using temporary,可以考虑使用索引或者将过滤条件放到where子句中以提高查询性能。 如果Extra值为Using index或者Using join buffer,说明查询已经使用了索引或者连接缓存区,无需进一步优化。 如果Extra值为Using filesort,可以考虑使用索引或者优化查询语句以减少排序的数据量以提高查询性能。
extra主要有是那种情况:Using index、Using filesort、Using temporary、Using where Using where无需多说,就是使用了where筛选条件。 数据准备: CREATETABLE`t_blog`(`id`int(11)NOTNULLauto_increment,`title`varchar(50)defaultNULL,`typeId`int(11)defaultNULL,`a`int(11)default'0',PRIMARYKEY(`id`),KEY...