用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧计算机应用

Oracle数据库的优化

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 11:55:12
查询里,那么查询的条件也可以应用于视图里,并且可以使用一个小一些的结果集。然而在一些情况下,也许可以通过视图分离组操作提高查询性能。
如果一个视图包含集合的操作(如Group by、SUM、COUNT或者DISTINCT),那么视图不能被集成到查询里去。
不使用组或者没有集合操作的视图的SQL语法可以被集成到大的查询里去。
2.5优化子查询
当使用自查询时,也许会碰到几个独特的问题。涉及子查询的查询潜在问题如下:
      也许在执行完查询的剩余部分前执行子查询(与执行分组功能的视图相似)。
      子查询也许要求特定的提示,但这些提示不直接与调用该子查询的查询有关
      可以作为单个查询执行的子查询也许被代替写成几个不同的子查询。
      也许在使用not in子句或者not exists子句时,不能在最有效的方式下进行子查询的存在查询。
1)当执行子查询时
     如果一个查询包含子查询,那么优化器有两种完成查询的方法:首先完成子查询,然后完成查询(“视图的方法”),或者将子查询集成到查询里去(“联结”的方法)。如果首先解决子查询,那么整个子查询的结果集将首先被计算,并且用查询条件的剩余部分做过滤器。如果没有使用子查询去进行存在检查,那么“联结”方法将通常要比“视图”方法完成得好。
     如果一个子查询包括集合操作,如group by,SUM或者DISTINCT,那么不能集成子查询到查询的其余部分里去。非集成的子查询限制了提供给优化器的选项。
2)如何组合子查询
一个查询可以包含多个子查询,使用的子查询越多,集成或者重写它们到大的联结里就越困难。既然有多个子查询使集成困难,就应该尽可能地组合多个子查询。
3)怎样进行存在检查
有时子查询不返回行(记录),但可以进行数据正确性检查。在相关表里的记录或者存在或者不存在的逻辑检查,称为存在检查。可以使用exists和not exists子句提高存在检查的性能。
2.6管理对非常巨大的表的访问
随着表增长到比SGA的数据块高速缓冲区存储器的空间显著大时,需要从另一个角度优化对这个表的查询。
1)问题
当表和它的索引小的时候,在SGA里可以有高度的数据共享。多用户读表或索引范围扫描可以反复使用同一个块。随着表的增长,表的索引也在增长。随着表和它的索引增长到比SGA里提供的空间大时,范围扫描需要的下一行将在SGA里找到的可能性变小,数据库的命中率将减小。最后,每一个逻辑读将要求一个单独的物理读。对使用非常大的表的优化方法着眼于特别的索引技术和有关索引的选择。
2)管理数据接近
在访问非常大的表期间,如果倾向于继续使用索引,那么应该关注数据接近,即逻辑相关记录的物理关系。为了使数据最大限度地接近,应该连续往表里插入记录。记录按通常在表的范围扫描里使用的列排序。
3)避免没有帮助的索引扫描
如果要对大表使用索引扫描,那么不能假定索引扫描将比全表扫描执行得更好。不紧跟表访问的索引唯一扫描或范围扫描执行得比较好,但紧跟通过RowID的表访问的索引范围扫描也许执行得差。随着表增长到比数据块高速缓冲存储器大得多,最终,索引扫描和全表扫描间的平衡点打破。
4)创建充分索引的表
如果表中的数据相当稳定,充分索引一个表是很有用的。创建一个复合索引,它包括所有在查询期间通常选择的列。在查询期间,查询要求的所有数据可以通过索引访问提供,不需要任何表访问。
5)并行选项
可以把一个数据库任务,比如Select语句,分为多个单元的工作,由多个Oracle进程同时执行。这种能够允许数据库的单个查询活动由多个协调的进程透明地进行处理的能力,称为并行查询选项(PQO)。
并行选项调用多个进程来利用空闲的系统资源,以减少完成任务所需要的时间。并行选项并不减少处理过程所要求的资源数量,而是把处理的任务分散给多个CPU。为了从并行选项中得到最大的好处,应该使CPU和磁盘上的I/O不要满负荷使用。因为并行的目的是使更多的CPU和磁盘同时参与处理数据库的命令,一个缺乏CPU和I/O资源的服务程序是不能从并行选项中得到好处的。
2.7使用UNION ALL而不是UNION
最常用的集操作是UNION操作,UNION操作使多个记录集联结成为单个集。UNION操作的数学定义是返回记录的单个集并且没有重复的行,所以在合并结果集里,Oracle只返回不同的记录。
当UNION操作用作SQL语句的一部分时,唯一性要求强迫Oracle移走重复的记录。Oracle的移走重复记录的功能是SORT UNIQUE操作,它与使用DISTINCT子句时执行的操作类似。
UNION ALL操作允许重复。UNION ALL不要求SORT UNIQUE操作,从而节省了开销。UNION ALL是一个行操作,所以当其变为有效就返回给用户。而UNION包括SORT UNIQUE集操作,在全部记录的集的排序结束前,不返回任何记录给用户。
当UNION ALL操作产生巨大的结果集时,不需要任何排序便返回记录给应用的事实意味着第一行检索的响应时间更快,并且在许多情况下,可以不用临时段完成操作。
在有些情况下,UNION ALL和UNION不返回同样的结果。如果在应用环境中,结果集并不包含任何重复的记录,则可以把UNION转换成UNION ALL。

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:9,531.25000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号