视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQL执行步骤的具体分析
2020-11-09 20:30:35 责编:小采
文档


SQL执行步骤的具体分析

先来看执行语句的顺序

(8)select (9)distinct A (1)from Ta (3)join Tb 
(2)on XXX (4)where XXX (5)group by XXX (6)with 
{cube|roll up} (7)having XXX (10)order by XXX (11)limit XXX 

 接着我们看一下具体分析查询处理的各个阶段:

  1. FROM  对from子句中的左表和右表执行笛卡尔集,产生虚拟表VT1
  2. ON  对虚拟表VT1进行on筛选,只有那些符合join condition的行才被插入虚拟表VT2中
  3. JOIN  如果指定了outer join,那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果from子句包含两个以上的表,则对上一个连接生成的结果表中VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表为止。
  4. WHERE  对虚拟表VT3进行where过滤条件,只有符合条件的才被插入到虚拟表VT4中。
  5. GROUP BY  根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
  6. CUBE|ROLL UP  对表VT5进行CUBE或者ROLLUP操作,产生表VT6.
  7. HAVING  对虚拟表VT6应用having过滤器,只有符合条件的记录才会被插入到虚拟表VT7中
  8. SELECT  第二次执行select操作,选择指定的列,插入到虚拟表VT8中。
  9. DISTINCT  去除重复数据,产生虚拟表VT9。
  10. ORDER BY  将虚拟表VT9中的记录按照指定的要求进行排序操作,产生虚拟表VT10
  11. LIMIT  取出指定行的记录,产生虚拟表VT11,并返回给查询用户

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:

  • PHP实现mysqli批量执行多条语句的方法示例
  • 用非动态SQL Server SQL语句来对动态查询进行执行
  • SQL SERVER 中构建执行动态SQL语句的方法
  • mybatis 插件: 打印 sql 及其执行时间实现方法
  • Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
  • Mysql 服务 1067 错误 的解决方法:修改mysql可执行文件路径
  • MySql批量插入优化Sql执行效率实例详解
  • oracle查看执行最慢与查询次数最多的sql语句
  • 下载本文
    显示全文
    专题