登录注册
上海交通大学论坛 > 数据库 > 浏览当前帖子 手机版 关闭左侧栏
Oracle基于Client/Server的性能调整[3]
返回本版】  【发表帖子】  【回复帖子 浏览量  4188      回帖数 0
小猫鱼    等级  

楼主 发表于  2011/8/25 18:22:44    编 辑   


3  应用程序的调整 
3.1 SQL语句的优化 
  SQL语句的执行速度,可以受很多因素的影响而变化。但主要的影响因素是:驱动表、 
执行操作的先后顺序和索引的运用。可以由很多不同的方法间接地改变这些因素,以达到 
最优的执行速度。这里主要探讨当对多个表进行连接查询时应遵循的优化原则: 

  (1)  用于连接的子句的列应被索引、在Where子句中应尽量利用索引,而不是避开索 
引。 

  (2)  连接操作应从返回较少行上驱动。 

  (3)  如果所连接的表A和B,A表长度远远大于B表,建议从较大的A表上驱动。 

  (4)  如果Where子句中含有选择性条件,Where No=20,将最具有选择性部分放在表达 
式最后。 

  (5)  如果只有一个表有索引,另一表无索引,无索引的表通常作为驱动表。如A表的 
No列以被索引,而B表的No 列没被索引,则应当B表作为驱动表,A表作为被驱动表。 

  (6)  若用于连接的列和Where子句中□□选择条件列均有索引,则按各个索引对查询 
的有效性和选择性分别定出级别,结合表中具体数据构成情况,从中选出优化路径,一般 
需要考虑:子句中哪些列可以使用索引、哪些索引具有唯一性及被查询表行数目等。 

3.2  建立和使用视图、索引 
  利用视图可以将基表中的列或行进行裁减、隐藏一部分数据,并且能够将涉及到多个 
表的复杂查询以视图的方式给出,使应用程序开发简洁快速。利用索引可以提高查询性能, 
减少磁盘 I/O,优化对数据表的查询,加速SQL语句的执行。但任何时候建立索引都能提高 
性能,何时建立索引应当遵循以下原则:该表常用来在索引列上查询,该表不常更新、插 
入、删除等操作,查询出来的结果记录数应控制在原表的2%~4% 。 

3.3  使用 Oracle 的数组接口 
  当一个客户应用程序插入一行或用一个查询来向服务器请求某行时,不是发送具有单 
个行的网络包,而是采用数组处理,即把要插入的多个行或检索出的多个行缓冲在数组中 
,然后通过很少的几个包就可在网上传送这些数组。例如,一个给定的Select语句返回 
2000行数据,每行平均大小为40个字节,数据包的大小为4kB,而数组大小参数(arraysize) 
设置为20 ,则需从服务器发送100个数据包到客户机。如果简单地把(arraysize)设置为 
2000,那么同样的操作只需要传送 20个数据包。这样就减少了网络的传输量,提高了所有 
应用的性能。 

4  总结 
  我们在开发应用程序时,遵循上述的方法和原则,对系统进行调整,收到了令人满意 
的效果。但是应当指出,由于客户机、网络、服务器这3个相互依存的组成部分都必须调整 
和同步才能产生最佳的性能,因此还应根据系统的具体情况,具体分析和调整。 
1
表情
所有内容均为会员自愿发表,并不代表本站立场.
论坛帮助 会员认证删帖申请 联系我们