MySQL查询执行计划学习
2014-07-17 21:30
302 查看
SELECT_TYPE:
1) SIMPLE:简单的SELECT,不实用UNION或者子查询mysql> explain select * from t2; +----+-------------+-------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | t2 | ALL | NULL | NULL | NULL | NULL | 100 | NULL | +----+-------------+-------+------+---------------+------+---------+------+------+-------+ 1 row in set (0.00 sec)
2) PRIMARY:最外层SELECT。
mysql> explain select * from (select * from t2 where id2=2) b; +----+-------------+------------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+------+---------------+------+---------+------+------+-------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 100 | NULL | | 2 | DERIVED | t2 | ALL | NULL | NULL | NULL | NULL | 100 | Using where | +----+-------------+------------+------+---------------+------+---------+------+------+-------------+ 2 rows in set (0.00 sec)
3) UNION:第二层,在SELECT之后使用了UNION。
mysql> explain select * from t1 union select * from t2; +----+--------------+------------+------+---------------+------+---------+------+-------+-----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------+------------+------+---------------+------+---------+------+-------+-----------------+ | 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 10208 | NULL | | 2 | UNION | t2 | ALL | NULL | NULL | NULL | NULL | 100 | NULL | | NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | Using temporary | +----+--------------+------------+------+---------------+------+---------+------+-------+-----------------+ 3 rows in set (0.00 sec)
4) DEPENDENT UNION:UNION语句中的第二个SELECT,依赖于外部子查询。
mysql> explain select * from t1 where id1 in (select id2 from t2 where id2<10 union select id3 from t3 where id3<5); +----+--------------------+------------+------+---------------+------+---------+------+-------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------------+------------+------+---------------+------+---------+------+-------+--------------------------+ | 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 10208 | Using where | | 2 | DEPENDENT SUBQUERY | t2 | ALL | NULL | NULL | NULL | NULL | 100 | Using where | | 3 | DEPENDENT UNION | t3 | ref | id3 | id3 | 5 | func | 1 | Using where; Using index | | NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | Using temporary | +----+--------------------+------------+------+---------------+------+---------+------+-------+--------------------------+ 4 rows in set (0.00 sec)
5) UNION RESULT:UNION的结果。
mysql> explain select * from t1 union select * from t2; +----+--------------+------------+------+---------------+------+---------+------+-------+-----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------+------------+------+---------------+------+---------+------+-------+-----------------+ | 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 10208 | NULL | | 2 | UNION | t2 | ALL | NULL | NULL | NULL | NULL | 100 | NULL | | NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | Using temporary | +----+--------------+------------+------+---------------+------+---------+------+-------+-----------------+ 3 rows in set (0.00 sec)
6) SUBQUERY:子查询中的第一个SELECT。
mysql> explain select * from t1 where id1=(select id2 from t2 where id2=2); +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ | 1 | PRIMARY | t1 | const | PRIMARY | PRIMARY | 4 | const | 1 | NULL | | 2 | SUBQUERY | t2 | ALL | NULL | NULL | NULL | NULL | 100 | Using where | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+ 2 rows in set (0.00 sec)
7)
DERIVED:被驱动的SELECT子查询
mysql> explain select * from (select * from t2 where id2=2) b; +----+-------------+------------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+------+---------------+------+---------+------+------+-------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 100 | NULL | | 2 | DERIVED | t2 | ALL | NULL | NULL | NULL | NULL | 100 | Using where | +----+-------------+------------+------+---------------+------+---------+------+------+-------------+ 2 rows in set (0.00 sec)
相关文章推荐
- MySQL学习系列2--MySQL执行计划分析EXPLAIN
- 学习如何看懂SQL Server执行计划(一)——数据查询篇
- MySql中如何使用 explain 查询 SQL 的执行计划
- MySQL查询执行计划的警告信息辨析一例
- 高性能可扩展mysql(执行计划,索引分析优化改写,删除重复数据,区间统计,满查询日志)
- MySQL EXPLAIN 命令: 查看查询执行计划
- MYSQL-基础操作-索引与查询执行计划
- mysql学习笔记(1)--Explain执行计划
- MySQL执行计划辨析--子查询的相关显示项的含义
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
- mysql查询缓存和执行计划
- [置顶]MySQL学习系列2--MySQL执行计划分析EXPLAIN [原创]
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
- 在MySQL中使用explain查询SQL的执行计划
- mysql(十一)索引、limit分页、执行计划、慢日志查询
- mysql查缺补漏(二)mysql5.6性能优化(explain执行计划术语,索引,优化查询)
- MySql学习—— 查询性能优化 深入理解MySql如何执行查询
- <<深入理解mariadb和mysql>>之mysql执行计划分析学习记录
- mysql阅读查询执行计划的简要说明