当前位置: 代码迷 >> SQL >> 《Oracle高性能SQL整合》
  详细解决方案

《Oracle高性能SQL整合》

热度:79   发布时间:2016-05-05 13:59:06.0
《Oracle高性能SQL调整》

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查询连接,connectby 连接

排序合并连接和散列连接:更大的吞吐量、排序、快(针对大记录子集)、不需要索引

嵌套循环连接:更短的反映时间、不排序、慢(针对大记录子集)、需要索引

产生记录排序的SQL:orderby ,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中无论何时都应该避免使用子查询,在某些情况下可以使用一个标准的连接操作来代替。

  相关解决方案