`
wataxi
  • 浏览: 201968 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics