Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

SQL性能优化技巧 PDF 下载


分享到:
时间:2021-11-08 09:49来源:http://www.java1234.com 作者:转载  侵权举报
SQL性能优化技巧 PDF 下载
失效链接处理
SQL性能优化技巧  PDF 下载


本站整理下载:
提取码:0eze 
 
 
相关截图:
 
主要内容:
 
1-1.什么是执行计划
    Oracle数据库在执行sql语句时,oracle的优化器会根据一定的规则确定sql语句的执行路径,以确保sql语句能以最优性能执行.在oracle数据库系统中为了执行sql语句,oracle可能需要实现多个步骤,这些步骤中的每一步可能是从数据库中物理检索数据行,或者用某种方法准备数据行,让编写sql语句的用户使用,oracle用来执行语句的这些步骤的组合被称为执行计划。
  当执行一个sql语句时oracle经过了4个步骤:
  ①.解析sql语句:主要在共享池中查询相同的sql语句,检查安全性和sql语法与语义。
  ②.创建执行计划及执行:包括创建sql语句的执行计划及对表数据的实际获取。
  ③.显示结果集:对字段数据执行所有必要的排序,转换和重新格式化。
  ④.转换字段数据:对已通过内置函数进行转换的字段进行重新格式化处理和转换.
1-2.查看执行计划
    查看sql语句的执行计划,比如一些第三方工具  需要先执行utlxplan.sql脚本创建explain_plan表。 
1.SQL> conn system/123456 as sysdba  
2.-- 如果下面语句没有执行成功,可以找到这个文件,单独执行这个文件里的建表语句  
3.SQL> @/rdbms/admin/utlxplan.sql  
4.SQL> grant all on sys.plan_table to public;  
  在创建表后,在SQL*Plus中就可以使用set autotrace语句来显示执行计划及统计信息。常用的语句与作用如下:
set autotrace on explain:执行sql,且仅显示执行计划
set autotrace on statistics:执行sql 且仅显示执行统计信息
set autotrace on :执行sql,且显示执行计划与统计信息,无执行结果
set autotrace traceonly:仅显示执行计划与统计信息,无执行结果
set autotrace off:关闭跟踪显示计划与统计
  比如要执行SQL且显示执行计划,可以使用如下的语句: 
1.SQL> set autotrace on explain  
2.SQL> col ename format a20;  
3.SQL> select empno,ename from emp where empno=7369;  
上面不一定可以执行成功,使用这个:explain plan for sql语句 
1.SQL> explain plan for  
2.  2  select * from cfreportdata where outitemcode='CR04_00160' and quarter='1' and month='2015';  
3.Explained  
4.  
5.SQL> select * from table(dbms_xplan.display);  
6.PLAN_TABLE_OUTPUT  
7.--------------------------------------------------------------------------------  
8.Plan hash value: 3825643284  
9.--------------------------------------------------------------------------------  
10.| Id  | Operation                   | Name            | Rows  | Bytes | Cost (%C  
11.--------------------------------------------------------------------------------  
12.|   0 | SELECT STATEMENT            |                 |     1 |   115 |     3  
13.|   1 |  TABLE ACCESS BY INDEX ROWID| CFREPORTDATA    |     1 |   115 |     3  
14.|*  2 |   INDEX RANGE SCAN          | PK_CFREPORTDATA |     1 |       |     2  
15.--------------------------------------------------------------------------------  
16.Predicate Information (identified by operation id):  
17.---------------------------------------------------  
18.   2 - access("OUTITEMCODE"='CR04_00160' AND "MONTH"='2015' AND "QUARTER"='1')  
19.       filter("MONTH"='2015' AND "QUARTER"='1')  
20.15 rows selected  
    PL/SQL DEVELOPER提供了一个执行计划窗口,如果在SQL Windows的窗口,按F8是执行该sql,按f5会显示该sql的执行计划。
 
3.理解执行计划
    1.全表扫描(full table scans):这种方式会读取表中的每一条记录,顺序地读取每一个数据块直到结尾标志,对于一个大的数据表来说,使用全表扫描会降低性能,但有些时候,比如查询的结果占全表的数据量的比例比较高时,全表扫描相对于索引选择又是一种较好的办法。
    2.通过ROWID值获取(table access by rowid):行的rowid指出了该行所在的数据文件,数据块及行在该块中的位置,所以通过rowid来存取数据可以快速定位到目标数据上,是oracle存取单行数据的最快方法。
    3.索引扫描(index scan):先通过索引找到对象的rowid值,然后通过rowid值直接从表中找到具体的数据,能大大提高查找的效率。
4.RBO 与 CBO优化器
Oracle的优化器有两种:
RBO(Rule-Based Optimization) 基于规则的优化器
CBO(Cost-Based Optimization) 基于代价的优化器
RBO:
RBO有严格的使用规则,只要按照这套规则去写SQL语句,无论数据表中的内容怎样,也不会影响到你的执行计划;
换句话说,RBO对数据“不敏感”,它要求SQL编写人员必须要了解各项细则;
RBO一直沿用至ORACLE 9i,从ORACLE 10g开始,RBO已经彻底被抛弃。
CBO:
CBO是一种比RBO更加合理、可靠的优化器,在ORACLE 10g中完全取代RBO;
CBO通过计算各种可能的执行计划的“代价”,即COST,从中选用COST最低的执行方案作为实际运行方案;
它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择,也就是对数据“敏感”。

 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐