1,优化器模式:rule,all rows,fist row
2,添加索引可能造成许多其他SQL语句执行计划的改变
3,可以为SQL存储可以立即执行的执行计划(调整持久化)
4,SQL调整目标:a 去掉不必要的大型表的全表扫描 b缓存小型表的全表扫描 c 检验优化索引的使用 d 检验优化的连接技术
5,一些sql 监控语句:access.sql plan.sql access-report..sql get_sql
6,大型表 块数远远大于200
7,对小表进行缓存
8,SQL中的四个步骤:解析,捆绑,执行和获取
9,
Oracle 有两个优化目标:最大速度(针对 OLTP, 使用 first_rows )、最小的资源占用(针对批处理,使用 all_rows )
表的访问方式:全表扫描、散列访问、 ROWID 访问
ROWID 中包含了一条记录的数据块号和它在数据块中的偏移量。
索引的访问方式:索引范围扫描、单个索引扫描、降序索引范围扫描、 and-euqal 过滤器
连接操作:嵌套循环连接,散列连接,排序合并连接, STAR 查询连接, connect by 连接
排序合并连接和散列连接:更大的吞吐量、排序、快(针对大记录子集)、不需要索引
嵌套循环连接:更短的反映时间、不排序、慢(针对大记录子集)、需要索引
产生记录排序的 SQL:order by ,join,group by,aggregate,select unique,select distinct,create index;
基于成本的优化器:需要了解的数据包括表数据、记录的数目、物理数据块的数目、索引数据、索引中唯一值的数目、索引中值的分布、索引的可选性、索引簇因素
磁盘排序之所以昂贵是由于下面几个原因:1,他们同在内存中进行排序比较起来太慢;2 磁盘排序将消耗零时表空间的资源。
SQL执行的级别:SQL源代码
执行计划(合并排序,完全表访问,散列连接,嵌套循环连接)
表访问方式(全表访问(合并+完全),RowId(散列连接,嵌套循环连接))
使用CTAS(create table as select),通过将记录的物理位置根据主键索引的顺序排序,这个方法将建筑地提高数据读取速度。这中方法只有在程序选择多条记录,使用索引范围扫描或者应用程序多次查询连续的主键时有用。
将全表扫描替换为索引范围扫描总体方针如下:
对于所有记录排序的表 40%
对于未经排序的表 7%
Oracle并行查询只适用于执行全表扫描的查询。
在内存中为所有会话使用的排序空间必须相同
如果表相对稳定,使用存储框架将会很大程度上提高SQL的性能,因为这样做将绕过SQL的解析过程。
只要可能的话,在Oracle的SQL中无论何时都应该避免使用子查询,在某些情况下可以使用一个标准的连接操作来代替。