`
Zhoumx
  • 浏览: 72420 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

oracle操作基本调优 工作笔记

阅读更多
数据库操作主要包含如下操作:
1.insert,2.delete,3.update,4.select
1.insert没什么优化的地方。
2.数据库优化包括很多方面,oracle本身和SQL优化是最基本的了,由于没有机会接触到oracle本身的调优处理工具,所以没办法调了,这里主要是介绍SQL的基本调优。
一般性能损耗主要取决于where条件,所以主要部分是在这里,主要过程应该是逐步的减小结果集来提高性能。具体做法如下,仅供参考。
1.约束严格的放在第一位,相当于=放前面,当要知道它所得到的结果集做小。
2.有索引的字段放前;
3.开销小的放前,一般in开销比较大,还有连表查询的条件,t1.id=t2.id
4.减少计算,使用索引,如x-columnA>y=>x-y>columnA=>常量>A
5.减少连表查询,有必要的话分布查询;
6.建立临时表处理大数据量的统计。如建立job定时执行用于处理排行的功能,以提供性能。
分享到:
评论
5 楼 Zhoumx 2008-05-03  
我太菜了 向达人学习,加油
4 楼 LucasLee 2008-04-30  
Libra Man 写道
数据库操作主要包含如下操作:
1.insert,2.delete,3.update,4.select
1.insert没什么优化的地方。
2.数据库优化包括很多方面,oracle本身和SQL优化是最基本的了,由于没有机会接触到oracle本身的调优处理工具,所以没办法调了,这里主要是介绍SQL的基本调优。
一般性能损耗主要取决于where条件,所以主要部分是在这里,主要过程应该是逐步的减小结果集来提高性能。具体做法如下,仅供参考。
1.约束严格的放在第一位,相当于=放前面,当要知道它所得到的结果集做小。
2.有索引的字段放前;
3.开销小的放前,一般in开销比较大,还有连表查询的条件,t1.id=t2.id
4.减少计算,使用索引,如x-columnA>y=>x-y>columnA=>常量>A
5.减少连表查询,有必要的话分布查询;
6.建立临时表处理大数据量的统计。如建立job定时执行用于处理排行的功能,以提供性能。


你说的这些早就是老黄历了,现在oracle9i及以上都不需要这些过时的技巧了。
你说的这些基本上属于RBO(rule based optimization),而"现代"(近5年?)的数据库基本上都才用CBO(cost based optimization),即按实际消耗来优化查询计划,也就是根据表的统计数据(包含共有多少条记录等信息)来优化。

RBO对编程的影响太大,需要按你说的那些去小心修改where条件顺序;
而CBO则跟你的where条件顺序基本上无关了。

我现在用的MySQL5也是CBO的,这个是大势所趋,除非你还在用很老版本(10年前?)的数据库,否则不需要关注这些东西,它们已经过时了。
3 楼 Zhoumx 2008-04-30  
说的非常有价值,谢谢!
2 楼 taelons 2008-04-26  
不用in,用exists代替
取值范围小的字段用bitmap索引
表和索引放在不同的表空间
定期重建索引
insert要考虑索引,因为新插入的记录要计算其索引位置,如果大量数据批量插入,则每插入一条都要计算所有相关的索引
1 楼 starworm 2008-04-25  
ORACLE的WHERE子句采用自下而上的顺序执行,所以约束严格的应该放在where子句的结尾。
其他的数据库的执行顺序请达人说说,以免初学者看到了产生误导

相关推荐

Global site tag (gtag.js) - Google Analytics