执行计划+光标移动大法——落落

2023-11-27 21:30

本文主要是介绍执行计划+光标移动大法——落落,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

执行计划

SQL> grant dba to scott;

Grant succeeded.

SQL> conn scott/scott

Connected.

创建测试表test

SQL> create table test as select * fromdba_objects;

Table created.

查看执行计划

SQL> explain plan for select count(*) from test;

Explained.

SQL> select* from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 1950795681

-------------------------------------------------------------------

| Id | Operation          | Name |Rows  | Cost (%CPU)| Time     |

-------------------------------------------------------------------

|   0| SELECT STATEMENT   |      |     1|   160  (2)| 00:00:02 |

|   1|  SORT AGGREGATE    |     |     1 |            |          |

|   2|   TABLE ACCESSFULL| TEST | 53509 |   160   (2)| 00:00:02 |

-------------------------------------------------------------------

Note

-----

   - dynamicsampling used for this statement

13 rows selected.

SQL> select sum(bytes/1024/1024) "size_MB" from user_segments where segment_name='TEST';

  size_MB

----------

        6

我们查出来这个表有6MB,那么扫描的时候大概会扫描6MB

创建索引

SQL> create index idx on test(object_id);

Index created.

SQL> alter table test modify object_id not null;

Table altered.

SQL>  explainplan for select count(*) from test;

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 2452503352

----------------------------------------------------------------------

| Id | Operation             | Name |Rows  | Cost (%CPU)| Time     |

----------------------------------------------------------------------

|   0| SELECT STATEMENT      |      |    1 |    29   (4)| 00:00:01 |

|   1|  SORT AGGREGATE       |     |     1 |            |          |

|   2|   INDEX FASTFULL SCAN| IDX  | 53509 |    29  (4)| 00:00:01 |

----------------------------------------------------------------------

Note

-----

   -dynamic sampling used for this statement

13 rows selected.

sql优化不要看cost、时间,因为cost是靠数据公式算出来的,不一定准。要看访问路径以及访问的基数。

执行计划——显示当前的访问路径

 

JOIN的实验

SQL> explain plan for select * from dept d,emp ewhere d.deptno=e.deptno and d.deptno=20;

Explained.

SQL> select * from table(dbms_xplan.display);

执行顺序:32410

分析:

Id=1 NESTED LOOPS  :嵌套循环,显示表与表之间的连接方式,此为父操作

Id=2 TABLE ACCESS BY INDEX ROWID:y与id=4缩进相同,处于同一个级别,但先执行上面的操作。Id=2下面又有一个缩进,意味着3是2的子操作,2是父操作,子操作先执行

因此执行顺序是32410。


光标移动大法

看<光标移动大发.txt>,就用sql*plus看,不要用阅读器看。

不是缩进越靠右越先执行!


从下往上看:

光标放到42行的‘table’前面,向上移,可以看到正好移动到3‘nested’前面,说明,2是3和42的父操作;3是个嵌套循环,他自己也是个父操作;再把光标放到3的第一个子操作前即4;4也是个父操作,把光标移到4的第一个子操作即5前,5和39平;再移到5的第一个子操作前即6,发现6、19、40平,但40在39后面,不能穿墙(不能穿过39到40),所以40不能算;再放到7,7和18连接;7是父操作,看8和13;8是父操作,看9和10,因为9在10上,所以最先执行9!

从上往下看:

         将光标放到0,发现没有与其对齐的;再把光标下移,放到1,发现也没有与其对齐的;光标移到2,没有与其对齐的;移到3,42与其对齐;接下来的步骤参照从下往上看。

看执行计划——找出父与子操作的关系

这篇关于执行计划+光标移动大法——落落的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/428496

相关文章

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo