:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) table 输出的行所引用的表...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...第一个子查询的select_type则是DEPENDENT SUBQUERY。...: 子查询中的第一个select其select_type为SUBQUERY。
:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) table...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...第一个子查询的select_type则是DEPENDENT SUBQUERY。...: 子查询中的第一个select其select_type为SUBQUERY。...其中第一行的type就是为system,第二行是const,这两种联接类型是最快的。
使用方法,在select语句前加上explain就可以了: 先看个例子 mysql> explain select * from t_order; | id | select_type | table...:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) table 输出的行所引用的表...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) table...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。
子查询语句的第一个select语句 DEPENDENT SUBQUERY 依赖外部查询的第一个子查询 DERIVED 派生表——该临时表是从子查询派生出来的,位于form中的子查询 MATERIALIZED...) Distinct MySQL正在寻找不同的值,因此它在找到第一个匹配行后停止为当前行组合搜索更多行。...unique row not found 对于查询,没有行满足 索引或表的条件。 Using filesort 使用文件排序。MySQL必须执行额外的传递以找出如何按排序顺序检索行。...然后对键进行排序,并按排序顺序检索行 Using index 仅使用索引树中的信息从表中检索列信息,而不必另外寻找读取实际行。当查询仅使用属于单个索引的列时,可以使用此策略。...如果查询包含以不同方式列出列的GROUP BY和 ORDER BY子句,则通常会发生这种情况。
SUBQUERY(subquery):子查询中的第一个SELECT,结果不依赖于外部查询。...DEPENDENT SUBQUERY(dependent subquery):子查询中的第一个SELECT,依赖于外部查询。...UNCACHEABLE SUBQUERY(uncacheable subquery):(一个子查询的结果不能被缓存,必须重新评估外链接的第一行) 3 table 输出结果集的表名称。...Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”。...Using index:只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。
可以应用在select、delete、insert、update和place语句上。...如果这一行表示其他行的union结果,这个值可以为空。在这种情况下,table列会显示为形如,表示它是id为M和N的查询行的联合结果。...或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。.... ● A full table scan is performed using reads from the index to look up data rows in index order....D:using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中。
,第一个就被标记为primary如果是union位于from中则标记为derived union result 用来从匿名临时表里检索结果的select被标记为union result dependent...union 顾名思义,首先需要满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询 subquery 子查询中第一个SELECT语句 dependent subquery...(union结果集) None First SELECT in subquery(子查询中的第一个select) DEPENDENT SUBQUERY dependent (true) First SELECT...Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by。...Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”。
InnoDB这种行锁实现特点意味着:只有通过有效索引条件检索数据行,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁!...UPDATE、DELETE 子查询条件下优化器的实现导致子查询下的行锁机制失效,行锁升级,对更多无关的行数据加锁,进而影响数据库并发和性能 。...where 从执行计划可以看出该 update 子查询,优化器先执行了 id 为2的 (DEPENDENT SUBQUERY )相关子查询部分,然后通过对 PRIMARY 以索引全扫描方式对全表 155041...,检索效率高于 not exists。...MySQL 优化器以及 InnoDB 行锁机制特性,增加了 UPDATE、DELETE 下子查询复杂的度,在 MySQL 数据库程序开发数据库维护过程中,真正了解优化器的实现和 InnoDB 行锁机制的行为
MySQL 中随机选择10条记录 SELECT id FROM user ORDER BY RAND() LIMIT 10; 数据量小于1000行的时候,上面的 sql 执行的快。...SELECT name FROM user WHERE id = 由于MAX(id) == COUNT(id),我们只是生成1和 max (id) 之间的随机数, 并将其传递到数据库中检索随机行...第一个select语句是NO-OP,并一直在被优化。第二个是针对常量的 eq 速度也很快。...但是一旦找到一行,就停止执行(LIMIT 1)。根据索引(ORDER BY id ASC)读取行。 当使用 >= 而不是a = 时,我们可以摆脱CEIL并以更少的工作获得相同的结果。...RAND() * MAX(ID) + ORDER BY ID Q1预计成本为N * log2(N),Q2和Q3几乎恒定。 我们用N行(一千到一百万)填充表格并执行每次查询1000次。
:子查询中的第一个SELECTDEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询DERIVED:导出表的SELECT(FROM子句的子查询) table 输出的行所引用的表...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。...Using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。Using where:WHERE 子句用于限制哪一个行匹配下一个表或发送到客户。...:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) table输出的行所引用的表...Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。
使用一个索引来检索给定范围的行。...通过结果中的key_len=4可推断出查询使用了第一个列:film_id列来执行索引查找。...where:mysql服务器将在存储引擎检索行后再进行过滤。...此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息。这种情况下一般也是要考虑使用索引来优化的。...1. actor.name未创建索引,会浏览actor整个表,保存排序关键字name和对应的id,然后排序name并检索行记录 mysql> explain select * from actor order
SIMPLE T5 NULL ref index_serial_id index_serial_id 259 cnpctest.T1.serial_id 1 100.00 NULL 我们逐行解读下这个信息 第一个行...第二个行(T2表) type: ref 表示使用了索引进行等值比较。 rows: 1 表示MySQL估计需要检索1行。 filtered: 100.00 表示过滤效果好。...Extra: Using where 表示使用了 WHERE 子句过滤。 第三个行(T3表) type: ref 表示使用了索引进行等值比较。 rows: 1 表示MySQL估计需要检索1行。...第四个行(T5表) type: ref 表示使用了索引进行等值比较。 rows: 1 表示MySQL估计需要检索1行。 filtered: 100.00 表示过滤效果好。...Using where 表示MySQL将在存储引擎层使用WHERE条件来过滤行。这意味着在检索出的结果集中,可能会有额外的条件过滤。
DEPENDENT UNION UNION中的第二个或后面的查询,依赖了外面的查询 UNION RESULT UNION的结果 SUBQUERY 子查询中的第一个 SELECT DEPENDENT SUBQUERY...FROM tbl_name 的查询,但没有行能够满足唯一索引或主键查询的条件 28 Using filesort 当Query 中包含 ORDER BY 操作,而且无法利用索引完成排序操作的时候,MySQL...官方解释:“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。...然后关键字被排序,并按排序顺序检索行” 29 Using index 仅使用索引树中的信息从表中检索列信息,而不必进行其他查找以读取实际行。当查询仅使用属于单个索引的列时,可以使用此策略。...36 Using temporary 为了解决该查询,MySQL需要创建一个临时表来保存结果。如果查询包含不同列的GROUP BY和 ORDER BY子句,通常会发生这种情况。
order by满足两种情况会使用index排序: ①、order by语句使用索引最左前列, ②、使用where子句与order by子句条件列组合满足索引最左前列 双路排序:MySQL4.1之前,两次扫描磁盘...单路排序:从磁盘读取查询需要的所有列,按照order by列在buffer对它们进行排序,然后扫描排序后的列进行输出,效率更高一点,但是它会使用更多的空间,因为它把每一行都保存在内存中了 优化策略:...但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢。...Using filesort 排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中。 Using index 查询时不需要回表查询,直接通过索引就可以获取查询的数据。...Using temporary 看到这个的时候,查询需要优化了。创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上。
:与dependent union类似,子查询中的第一个SELECT,这个subquery的查询要受到外部表查询的影响。...(5)fulltext:全文索引检索,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引。...(3)key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。...意味着用到了索引,但是部分字段未被索引覆盖,须通过“回表”来获取查询所需的字段 using temporary 用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,通常是因为group...也有可能是因为同时有group by和order by,但group by和order by的列又不一样,一般看到它说明查询需要优化了 using filesort MySQL有两种方式对查询结果进行排序
:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) (3)table:表名...对前面的表的每个行组合,MySQL检查是否可以使用range或index_merge访问方法来索取行。 Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。...通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。...Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。当查询只使用作为单一索引一部分的列时,可以使用该策略。...Using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。
一共查了 0 行。...SUBQUERY:子查询中的第一个 SELECT。 DEPENDENT SUBQUERY:子查询中的第一个 SELECT,取决于外面的查询。...Extra:如果是 Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。 如果是 where used,就是使用上了 where 限制。...如果此信息显示 Using filesort 或者 Using temporary 的话会很吃力,WHERE 和 ORDER BY 的索引经常无法兼顾,如果按照 WHERE 来确定索引,那么在 ORDER...BY 时,就必然会引起 Using filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算。
面试官:order by 怎么优化? 面试官:count (*) 怎么优化?...:子查询中的 第一个 select,同时取决于外面的查询 uncacheable subquery:子查询中的 第一个 select,同时意味着 select 中的某些特性阻止结果被缓存于一个 Item_cache...使用一个索引来检索给定范围的行。 ref:索引查找,不使用唯一索引,使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。...Using where:在存储引擎检索行后再进行过滤,就是先读取整行数据,再按 where 条件进行取舍。...Using filesort:对结果使用一个外部索引排序,而不是按索引次序从表里读取行,一般有出现该值,都建议优化去掉,因为这样的查询 CPU 资源消耗大。
因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。...subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery dependent subquery:与dependent union类似,表示这个subquery的查询要受到外部表查询的影响...union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union。...using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中。 using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据。...MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。