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

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

相关文章

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程

《双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程》:本文主要介绍如何在Windows11系统中使用VMware17创建虚拟机,并在虚拟机中安装Ubuntu22.04桌面版或Ubunt... 目录一、首先win11中安装vmware17二、磁盘分区三、保存四、使用虚拟机进行系统安装五、遇见的错误和解决

使用FileChannel实现文件的复制和移动方式

《使用FileChannel实现文件的复制和移动方式》:本文主要介绍使用FileChannel实现文件的复制和移动方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录使用 FileChannel 实现文件复制代码解释使用 FileChannel 实现文件移动代码解释

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的