首页 > 代码库 > 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优化总结