2008-04-25
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定时执行用于处理排行的功能,以提供性能。
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定时执行用于处理排行的功能,以提供性能。
评论
Lucas Lee
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定时执行用于处理排行的功能,以提供性能。
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年前?)的数据库,否则不需要关注这些东西,它们已经过时了。
Libra Man
2008-04-30
说的非常有价值,谢谢!
taelons
2008-04-26
不用in,用exists代替
取值范围小的字段用bitmap索引
表和索引放在不同的表空间
定期重建索引
insert要考虑索引,因为新插入的记录要计算其索引位置,如果大量数据批量插入,则每插入一条都要计算所有相关的索引
取值范围小的字段用bitmap索引
表和索引放在不同的表空间
定期重建索引
insert要考虑索引,因为新插入的记录要计算其索引位置,如果大量数据批量插入,则每插入一条都要计算所有相关的索引
starworm
2008-04-25
ORACLE的WHERE子句采用自下而上的顺序执行,所以约束严格的应该放在where子句的结尾。
其他的数据库的执行顺序请达人说说,以免初学者看到了产生误导
其他的数据库的执行顺序请达人说说,以免初学者看到了产生误导
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 6128 次
- 性别:

- 来自: 长沙

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
我的Ext超级简单教程
先下载,谢谢,现在正需要掌握 EXT.JS
-- by simon1006 -
我的Ext超级简单教程
Thanks a lot
-- by chaoerkaka -
oracle操作基本调优 工作 ...
Libra Man 写道数据库操作主要包含如下操作: 1.insert,2.de ...
-- by Lucas Lee -
oracle操作基本调优 工作 ...
说的非常有价值,谢谢!
-- by Libra Man -
oracle操作基本调优 工作 ...
不用in,用exists代替 取值范围小的字段用bitmap索引 表和索引放在不 ...
-- by taelons






评论排行榜