SQL优化 第二章 获取执行计划

本文深入解析SQL执行计划的获取方法,包括真实执行计划、autotrace和EXPLAIN PLAN的使用,探讨了执行计划的入口选择及其重要性。通过对比估算行数与实际返回行数,帮助读者理解并优化数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料:
本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。

 

执行计划就是SQL执行的步骤,因为我们写的SQL不一定就是按照我们写的执行,数据库优化器会根据统计信息(统计信息后面讲解)进行SQL改写(SQL改写后面讲解),生成执行计划,但是下面三种执行计划,作为基本,要掌握。

另外,一般获取执行计划时至少执行两次,以固定执行计划(因为优化器自己也会自己进化执行计划,达到性能优化目的)及消除物理读。

物理读:从磁盘读取数据

逻辑读:从内存读取数据

 

1 获取真实执行计划

Alter session set statistics_level=all;    

Select * from table(dbms_xplan.display_cursor(null,null,'allstats last')) ;

例子:

Alter session set statistics_level=all;

select * from emp;

Select * from table(dbms_xplan.display_cursor(null,null,'allstats last')) ;

 

A-Rows(实际返回行数)是这种获取方式独有的,也是超级具有参考价值的

E-Rows(估算返回行数)和A-Rows的比较很重要,当相差很大时,我们有时候要更改执行计划。

2 set autotrace on/off/traceonly

这个是根据统计信息拿到估算的执行计划。

set autotrace on;

select * from emp;

逻辑读总计(consistent gets),物理读总计(physical reads),递归调用次数(recursive calls)可以方便看到。

3 EXPLAIN PLAN

当某个性能SQL死掉,不出结果时,我们可以用这个,这个肯定是估算的执行计划,但是没有办法,我们只能先参考这个进行优化。

EXPLAIN PLAN FOR select * from emp;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

超级简单的执行计划,在不出结果时初步参考使用,属于无奈之举。

4 关于执行计划入口选择

执行计划的入口选在很重要,我们要知道执行计划从哪里开始的,执行计划阅读方法请自行网上搜索<光标移动大法>,这是一个比较好用的办法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值