排序调优

   避免索引:
  .创建索引时使用NOSORT子句(在一个单CPU的机器中使用SQL*Loader时,可以在建索引时使用NOSORT子句,这样可以避免对数据进行预先排序。这个子句只对数据插入到表时有效):
   SQL> create index EMPLOYEES_DEPARTMENT_ID_FK on employees(department_id)           NOSORT;
     ORA-01409: NOSORT option may not be used; rows are not in ascending order
   在一个多CPU的机器中,并行加载数据可能更快,即使加载的数据不整齐。然后能够     使用并行索引创建来提高排序。
  .使用UNION ALL代替UNION(使用UNION ALL代替UNION;这个子句不能消除重复,所以     不需要排序)
  .Nested Loop Joins(嵌套的循环连接)
   使用索引访问对于对等连接请求:
   SQL> select department_name, Last_name
        from employees e, departments d
         where e.department_id = d.department_id;
      最优化选择一个嵌套的循环连接代替一个合并排序连接。一个嵌套的循环连接不请求任何的排序。这步需要做下面的操作:
       1、在employees表上执行一个全表扫描
       2、对于返回的每一行使用DEPARTMENT_ID的值去执行一个唯一扫描在主键索引(departments表的主键)上
       3、使用从索引扫描获得的ROWID去定位在departments表中匹配的行
       4、把从employees表返回的行跟从departments表中返回的匹配的行合并 
  .在经常被ORDER BY子句引用的列上建索引(既然索引已经经过升序排序并且是双向链接,服务器使用索引好于一个排序操作。)        
  .对列进行分析(只对感兴趣的列收集统计;比如,那些相关的的连接条件,
   ANALYZE... FOR COLUMNS 或者 ANALYZE...FOR ALL INDEXED COLUMNS.
   注意:ANALYZE... SIZE n命令为相关的列建立柱状图。用FOR ALL INDEXED                  COLUMNS这个子句进行综合,对于主键和唯一键约束来说,可以避免产生不必            要的柱状图)
  .ANALYZE ESTIMATE(COMPUTE子句对于最优化来说更精确。但是,它需要一个大的排     序空间。ESTIMATE子句对于大的表和簇表来说更好)

 

学Oracle技术,就到CUUG,在北京,相信自己一定赢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值