mysql sql执行顺序
<pre name="code" class="html">mysql> explain select * from (select * from ( select * from test where id=1) a) b;
+----+-------------+------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+---------------+------+---------+------+------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
| 2 | DERIVED | <derived3> | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
| 3 | DERIVED | test | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
+----+-------------+------------+------+---------------+------+---------+------+------+-------------+
3 rows in set (0.00 sec) 很明显 这里ID=3 先执行, ID=2 select_type=DERIVED是一个派生表指向<derived3> 表示3产生的派生表 ID=1 PRIMARY:最外面的SELECT 最外面执行的SELECT <derived2> 表示ID=2产生的派生表 mysql> explain select t1.* from t2 ,t1 where t2.id=t1.id;
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
| 1 | SIMPLE | t2 | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 3 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
2 rows in set (0.00 sec) 如果id相同,则执行顺序从上至下。 SIMPLE
简单SELECT(不使用UNION或子查询等) id=1 t2返回的记录 t2为驱动表,传递给t1 对比Oracle的嵌套循环: SQL> explain plan for select t1.* from t1,t2 where t1.id=t2.id; 已解释。 SQL> select * from table(dbms.exlain.display());
select * from table(dbms.exlain.display())
*
第 1 行出现错误:
ORA-00904: "DBMS"."EXLAIN"."DISPLAY": 标识符无效 SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2959412835 ---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7 | 266 | 6 (0)| 00:00:01 |
|* 1 | HASH JOIN | | 7 | 266 | 6 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| T2 | 6 | 78 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| T1 | 7 | 175 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------- PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
--------------------------------------------------- 1 - access("T1"."ID"="T2"."ID") Note
-----
- dynamic sampling used for this statement (level=2) 已选择19行 采集统计信息: BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'QUERY',
tabname => 'T1',
estimate_percent => 30,
method_opt => 'for all columns size repeat',
no_invalidate => FALSE,
degree => 8,
cascade => TRUE);
END; BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'QUERY',
tabname => 'T2',
estimate_percent => 30,
method_opt => 'for all columns size repeat',
no_invalidate => FALSE,
degree => 8,
cascade => TRUE);
END; SQL> explain plan for select t1.* from t1,t2 where t1.id=t2.id; 已解释。 SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 469473159 ------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7 | 119 | 3 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 7 | 119 | 3 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| T1 | 7 | 98 | 3 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | T2_IDX1 | 1 | 3 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------ Predicate Information (identified by operation id):
--------------------------------------------------- 3 - access("T1"."ID"="T2"."ID") 已选择15行。 mysql> explain select t1.* from t2 ,t1 where t2.id=t1.id;
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
| 1 | SIMPLE | t2 | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 3 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+------+---------------+------+---------+------+------+----------------------------------------------------+
2 rows in set (0.00 sec) 如果id相同,则执行顺序从上至下。 SIMPLE
简单SELECT(不使用UNION或子查询等) id=1 t2返回的记录 t2为驱动表,传递给t1 原理类似:
mysql sql执行顺序的更多相关文章
- 0708关于理解mysql SQL执行顺序
转自 http://www.jellythink.com/archives/924,博客比价清晰 我理解上文的是SQL执行顺序 总体方案.当你加入索引了以后,其实他的执行计划是有细微的变化,比方说刚开 ...
- MySQL中的索引、左连接、右连接、join、sql执行顺序
逻辑架构: 1.连接层 2.服务层 3.引擎层(插拔式) 4.存储层 存储引擎: 常用的有:MyISAM.InnoDB 查看命令:show variables like '%storage_engin ...
- Mysql 语句执行顺序
1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上只用到了sql语句,如何写sql以及对其进行优化就比较重要,那些mysql的厚本书籍针对的是DBA,我们只需 ...
- SQL执行顺序和coalesce以及case when的用法
1.mysql的执行顺序 from on join where group by having select distinct union //UNION 操作符用于合并两个或多个 SELECT ...
- SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序
与大多数语言一样,SQL语言也有一个执行顺序,只是在大多数编程语言中,代码是按照编写顺序来处理的,而在SQL中则不是,下图为SQL 执行顺序. () ) [ ALL | DISTINCT ] () [ ...
- 获取分组后统计数量最多的纪录;limit用法;sql执行顺序
CREATE TABLE emp(id INT PRIMARY KEY,NAME VARCHAR(11),dep_id INT ,salary INT); CREATE TABLE dept(id I ...
- mysql索引及sql执行顺序
1, 红黑树 同一层级的黑树到根结点经历的黑树数目一样 最坏情况的时间复杂度 lg n 是二叉树b树 结点可以有多个孩子 b+树 父节点不存储数据聚集索引)的叶子节点会存储数据行,也就是说数据和索引是 ...
- Mysql资料 查询SQL执行顺序
目录 一.Mysql数据库查询Sql的执行顺序是什么? 二.具体顺序 一.Mysql数据库查询Sql的执行顺序是什么? (9)SELECT (10) DISTINCT column, (6)AGG_F ...
- 一条sql语句搞定基于mysql的sql执行顺序的基本理解
对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <le ...
随机推荐
- 11g的alert日志路径
一个测试库,11g,没有sys账户,无法用show parameter dump查看alert日志的路径,以前也碰到过,但后来就不了了之了.这次深挖下,也参考了下一些网上的帖子,于是找到了: $ORA ...
- HDU SPFA算法 Invitation Cards
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1535 分析: 题意:求1点到其它点的最短距离之和+其它点到1点的最短距离之和 前面一部分直接用SPFA ...
- 嵌入式:使用dd命令制作烧写文件
1. 使用dd命令制作烧写文件 环境: bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtd ...
- 网页制作之JavaScript部分 2 - DOM操作
1.DOM的基本概念 htmlDOM是一种面向对象的树的模型,它包含html中的所有元素:通过html可以找到所有包含在dom中的元素. DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对 ...
- WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...
- c++ 中CImage类Load函数,路径中含有空格应对策略!
最近,在写一些东西的时候,需要用到CImage类将JPG各式的图片转换成BMP图片,传入的是图片的绝对地址:如C:\Users\Administrator\Documents\Visual Studi ...
- 在大型项目上,Python 是个烂语言吗
Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...
- Java--Http向服务端提交字条串数据
package com.joye3g.http; import java.io.BufferedReader; import java.io.DataOutputStream; import java ...
- [ACM] HDU 5083 Instruction (模拟)
Instruction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- ORACLE实例恢复过程详细分析--使用dump、BBED等多种工具结合分析
---友情提示,内容较多,可以从博文左上的+目录选择小节方便阅读. 实验思路: --实验相关TRACE文件:http://download.csdn.net/detail/q947817003/6 ...