Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85810
  • 博文数量: 15
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-12 16:30
文章分类

全部博文(15)

文章存档

2008年(15)

我的朋友

分类: Oracle

2008-03-10 08:50:36


来源:程序员启示录

首先,我们从数据库的内存SGA说起,根据SQL语句缓冲区的原理:SQL语句会先进入此区进行SQL对比,如果有此SQL语句,将直接执行,如果没有时才进行分析。由于SQL语句的经常使用,有良好的SQL语句规范,会给数据库带来一定程序上的优化。比如说,在一个项目组里面,定义一个表的别名,如果设定规范。那么就可以省去SQL缓冲区的分析步骤。
二、是块缓冲区高速缓存,管理员可以根据内存大小,把常用的表预先加入缓冲区。要知道在内存中读取要比在硬盘中读取快得多。
三、还有SGA里面的重做日志缓冲区的设置也可以起到一定的优化作用。在用户做DML操作的时候,系统会把旧数据库放入此缓冲区,如果频繁使用DML操作的数据库。这个缓冲区作大一些。
四、在进程方面,归档进程因为是做时时恢复工作,所以会对机器性能影响比较大。
五、在逻辑结构方面,表空间中的块默认值是8K。管理员可以手动去设置。

六、除了本身的这些以外,合理的设计表和管理表,1.比如说表空间的分区。分区扫描要比全表扫描快得多。
七、在做族(cluster)的时候,合理的分配参数可以起到控制碎片的作用。
八、别名的使用,在大型数据库中,使用一个字母的别名,要比建连接表的速度快1.5倍。
九、索引优化设计,建立索引会大大的提高查询速度。但前提是合理的设置索引,如果乱用多用,性能反而会降低。一般来说,一个表建立两到三个索引比较合理。
十、最后说下SQL语句的设计:
(1)减少对数据库的查询次数,即减少对系统资源的请求,使用快照和显形图等分布式数据库对象可以减少对数据库的查询次数。
(2)尽量使用相同的或非常类似的SQL语句进行查询,这样不仅充分利用SQL共享池中的已经分析的语法树,要查询的数据在SGA中命中的可能性也会大大增加。
(3)限制动态SQL的使用,虽然动态SQL很好用,但是即使在SQL共享池中有一个完全相同的查询值,动态SQL也会重新进行语法分析。
(4)避免不带任何条件的SQL语句的执行。没有任何条件的SQL语句在执行时,通常要进行FTS,数据库先定位一个数据块,然后按顺序依次查找其它数据,对于大型表这将是一个漫长的过程。
(5)可以通过取消自动提交模式,将SQL语句汇集一组执行后集中提交,程序还可以通过显式地用COMMIT和ROLLBACL进行提交和回滚该事务。

阅读(888) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~