您的位置:首页 > 数据库 > Oracle

Oracle里面关于排序的优化

2014-03-10 09:06 211 查看
Oracle里面关于排序的优化,只有两种策略:

一种就是尽量将需要排序的数据装载到内存(PGA区域)中,减少磁盘I/O次数。

另一种就是能不排序就不排序。除了order by语句一定排序外,distinct、union等操作会隐含进行排序。Distinct是需要先排序相关字段,然后去掉重复记录。而union和union all的区别是,前者的结果集也需要去掉两个查询语句的重复记录,所以需要排序。后者的结果集市所有记录,包括重复记录,所以不需要排序。

oracle对group by采用的是hashgroup by算法,该算法不保证结果集排序。可以通过内部参数来设置group by算法:

_gby_hash_aggregation_enabled=false或者设置optimizer_features_enabled=9.2.0

适合于大批量数据处理的连接技术只有两种:

1.  排序合并连接(Sort/Merge)技术

两个表先按连接字段进行排序,再将两个表的排序结果进行顺序匹配,将合并结果返回给客户。

2.  哈希连接(HASH)技术

A hash join isexecuted as follows:

Both tables aresplit into as many partitions as required, using a full table scan.

For eachpartition pair, a hash table is built in memory on the smallest partition.

The otherpartition is used to probe the hash table.

两种技术都适合于大表与大表的查询,而且通常情况下,HASH优于Merge,更优于嵌套循环(Nested_Loop)连接技术,尤其是当HASH与Oracle并行处理技术相结合的情况下,将极大地提高系统的整体吞吐量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: