MySQL优化之分析查询语句实战演示(二)

63 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

前言

上篇我们学习了MySQL中的数据库优化之分析查询语句实战演示。有兴趣的小伙伴可以阅读(MySQL优化之分析查询语句实战演示(一))。
下面我们继续学习MySQL中的数据库优化之分析查询语句实战演示。

id

在写的查询语句一般都以SELECT关键字开头,比较简单的查询语句里只有一个SELECT关键字,如下:

SELECT *
FROM s1
WHERE key1 = `a`;

复杂一些的连接查询中也只有一个SELECT语句,比如:

SELECT *
FROM s1 INNER JOIN s2
ON s1.key1 = s2.key1
WHERE s1.common_field = `a`;

举例一

EXPLAIN SELECT * 
FROM s1
WHERE key1 = `a`;
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEs1NULLrefidx_key1idx_key1203const8100.00NULL

举例二

EXPLAIN SELECT * 
FROM s1 INNER JOIN s2;
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEs1NULLALLNULLNULLNULLNULL8563100.00NULL
1SIMPLEs2NULLALLNULLNULLNULLNULL8349100.00Using join buffer (Blook Nested Loop)

举例三

EXPLAIN SELECT * 
FROM s1 
UNION ALL
SELECT *
FROM s2;
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1PRIMARYs1NULLALLNULLNULLNULLNULL8769100.00NULL
2UNIONs2NULLALLNULLNULLNULLNULL8543100.00NULL

总结:

  • id如果是相同的,可以认为是一组,从上向下顺序执行。
  • 在所有组中,id值越大,优先级越高,越先执行。
  • id号每个号码:表示一趟独立的查询,一个sql的查询趟数越少越好。

select_type

名称描述
SIMPLESimple SELECT (not using UNION or subqueries)
PRIMARYOutermost SELECT
UNIONSecond or later SELECT statement in a UNION
UNION RESULTResult of a UNION
SUBQUERYFirst SELECT in subquery
DEPENDENT SUBQUERYFirst SELECT in subquery,dependent on out query
DEPENDENT UNIONSecond or later SELECT statement in a UNION,dependent on out query
DERIVEDDerived table
MATERIALIZEDMaterialized subquery
UNCACHEABLE SUBQUERYA subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query
UNCACHEABLE UNIONThe second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)

举例一和举例二算SIMPLE类型,我们从结果中也可以看出。

今天先学习到这里,明天继续。