3.优化器模式的选择
1优化器的模式
1.1.RULE模式
Oracle将使用RBO来解析目标SQL,统计信息将失去作用
1.2.CHOOSE模式
Oracle 9i中OPTIMIZER_MODE的默认值,表示Oracle在解析目标SQL到底使用RBO还是CBO,如果该SQL涉及的表存在统计信息,Oracle解析SQL就会使用CBO,如果所有表对象没有统计信息,用RBO
1.3.FIRST_ROWS_n(n=1,10,100,1000)模式
当OPTIMIZER_MODE的值为FIRST_ROWS_n(n=1,10,100,1000)时,Oracle会把那些能够以最快的响应速度返回头n(n=1,10,100,1000)条记录所对应的执行步骤的成本值修改为一个很小的值(远远小于默
认情况下CBO对同样执行步骤所计算出的成本值)。这样Oracle就既没有违背CBO选取执行计划的总原则(成本值最小),同时又兼顾了FIRST_ROWS_n(n=1,10,100,1000)含义。
1.4.FIRST_ROWS
它表示Oracle在解析目标SQL时会联合使用CBO和RBO。此时CBO在计算该SQL的各条件执行路径的成本值时的侧重点在于以最快的响应速度返回头几条记录,当特殊情况是,FIRST_ROWS会使用RBO规则
选取执行计划,不再考虑成本,
1.5.ALL_ROWS
是Oracle10g以后后续数据库版本中OPTIMITZER_MODE默认值,他表示Oracle会使用CBO来解析目标SQL,此时CBO在计算该SQL的各条件执行路径的成本值时的侧重点在吞吐量。
总结:ALL_ROWS侧重点是最佳的吞吐量,FIRST_ROWS_n(n=1,10,100,1000)侧重点是最快的响应速度返回头n(n=1,10,100,1000)条记录。
2.结果集
指包含指定执行结果的集合,结果集和目标SQL的执行计划的执行步骤对应,一个执行步骤所产生的之心结果就是该执行步骤所对应输出的结果集
3.访问数据的方法
3.1.访问表的方法
3.1.1全表扫描:扫描表所在的block块。
3.1.2rowid扫描:通过扫描物理地址扫描数据
scott@ORCLPDB01 2023-04-01 17:08:18> select empno,ename,rowid,dbms_rowid.rowid_relative_fno(rowid) || '_' || dbms_rowid.rowid_block_number(rowid) || '_' || dbms_rowid.rowid_row_number(rowid) location from emp;
EMPNO ENAME ROWID LOCATION
---------- ---------- ------------------ --------------------------------------------------------------------------------------------------------------------------
7369 SMITH AAASRwAAMAAAACVAAA 12_149_0
7499 ALLEN AAASRwAAMAAAACVAAB 12_149_1
7521 WARD AAASRwAAMAAAACVAAC 12_149_2
7566 JONES AAASRwAAMAAAACVAAD 12_149_3
7654 MARTIN AAASRwAAMAAAACVAAE 12_149_4
7698 BLAKE AAASRwAAMAAAACVAAF 12_149_5
7782 CLARK AAASRwAAMAAAACVAAG 12_149_6
7788 SCOTT AAASRwAAMAAAACVAAH 12_149_7
7839 KING AAASRwAAMAAAACVAAI 12_149_8
7844 TURNER AAASRwAAMAAAACVAAJ 12_149_9
7876 ADAMS AAASRwAAMAAAACVAAK 12_149_10
7900 JAMES AAASRwAAMAAAACVAAL 12_149_11
7902 FORD AAASRwAAMAAAACVAAM 12_149_12
7934 MILLER AAASRwAAMAAAACVAAN 12_149_13
14 rows selected.
Elapsed: 00:00:00.02