开启掘金成长之旅!这是我参与「掘金日新计划 · 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`;
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | s1 | NULL | ref | idx_key1 | idx_key1 | 203 | const | 8 | 100.00 | NULL |
举例二
EXPLAIN SELECT *
FROM s1 INNER JOIN s2;
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | s1 | NULL | ALL | NULL | NULL | NULL | NULL | 8563 | 100.00 | NULL |
1 | SIMPLE | s2 | NULL | ALL | NULL | NULL | NULL | NULL | 8349 | 100.00 | Using join buffer (Blook Nested Loop) |
举例三
EXPLAIN SELECT *
FROM s1
UNION ALL
SELECT *
FROM s2;
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | PRIMARY | s1 | NULL | ALL | NULL | NULL | NULL | NULL | 8769 | 100.00 | NULL |
2 | UNION | s2 | NULL | ALL | NULL | NULL | NULL | NULL | 8543 | 100.00 | NULL |
总结:
- id如果是相同的,可以认为是一组,从上向下顺序执行。
- 在所有组中,id值越大,优先级越高,越先执行。
- id号每个号码:表示一趟独立的查询,一个sql的查询趟数越少越好。
select_type
名称 | 描述 |
---|---|
SIMPLE | Simple SELECT (not using UNION or subqueries) |
PRIMARY | Outermost SELECT |
UNION | Second or later SELECT statement in a UNION |
UNION RESULT | Result of a UNION |
SUBQUERY | First SELECT in subquery |
DEPENDENT SUBQUERY | First SELECT in subquery,dependent on out query |
DEPENDENT UNION | Second or later SELECT statement in a UNION,dependent on out query |
DERIVED | Derived table |
MATERIALIZED | Materialized subquery |
UNCACHEABLE SUBQUERY | A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query |
UNCACHEABLE UNION | The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY) |
举例一和举例二算SIMPLE类型,我们从结果中也可以看出。
今天先学习到这里,明天继续。