首页 > 代码库 > sql优化(oracle)- 第三部分  sql优化总结

sql优化(oracle)- 第三部分  sql优化总结

第三部分  sql优化总结
        1. 优化一般原则
        2. 具体注意事项

 

1. SQL优化一般性原则
  1)目标:减少服务器资源消耗(主要是磁盘IO)
  2)设计:
    1. 尽量依赖oracle优化器
    2. 合适的索引(数据重复量大的列不要简历二叉树索引,可以使用位图索引; 对应数据操作频繁的表,索引需要定期重建,减少失效的索引和碎片)
  3)编码:
    1. 利用索引
    2. 合理利用临时表
    3. 避免写过于复杂的sql;
    4. 尽量减小事务的粒度

2. 具体注意事项
  1)查询时尽量使用确定的列名
  2)尽量少使用嵌套的子查询,这种查询很消耗cpu资源
  3)多表查询的时候,选择最有效率的表名顺序
   oracle解析器对表的处理顺序从右到左,所以记录少的表放在右边(最右边的表为基础表,drivering table最先被处理), 如果3个以上的表连接查询,则要选择交叉表作为基础表
  4)or比较多时分为多个查询,使用union all(尽量用union all代替union)联结(适应于索引列)
  5) 尽量多用commit提交事务,可以及时释放资源、解锁、释放日志
  6)访问频繁的表可以放置在内存中
  7)避免复杂的多表关联
  8)避免distinct,union(并集),minus(差集),intersect(交集),order by等耗费资源的操作,因为会执行耗费资源的排序功能
  9)使用exists替代distinct
   select c.distinct c.classname, c.classid, classno from student s, class c where s.classno= c.classno;
  --替换为
   select  classname, classid, classno from class c where exists (select * from student s where s.classno = c.classno);

    delete删除时,没有commit前可以回滚;truncate后不能回滚,执行时间较短
   11)使用表的别名,可以减少解析时间
   12)exists和in的选择问题,不同时候区分对待
   13)合理使用索引

sql优化(oracle)- 第三部分  sql优化总结