ORALCE hash group by 和 sort group by
时间: 2023-11-21 11:53:58 浏览: 193
ORACLE数据库中的GROUP BY操作可以通过HASH GROUP BY和SORT GROUP BY两种方式实现。在10g以前,GROUP BY是通过按照GROUP BY中的列对记录进行排序实现的。而在10g以后,HASH GROUP BY通过在读取表时将聚合计算在散列表中避免了排序,理论上比SORT GROUP BY速度更快并消耗更少的内存。然而,HASH GROUP BY的初始实现存在很多bug,在11.1.0.7和10.2.0.4版本发布后基本解决了。如果遇到了和HASH GROUP BY方法相关的问题,可以尝试关闭HASH GROUP BY,通过参数_GBY_HASH_AGGREGATION_ENABLED设置为FALSE来禁用HASH GROUP BY。如果在同一个表达式中使用GROUP BY和ORDER BY,优化器通常会决定使用SORT GROUP BY(而不是HASH GROUP BY),因为SORT GROUP BY会按照顺序返回记录。在10g以前的版本,GROUP BY操作通常会按照排序的顺序返回记录,因此ORDER BY子句事实上不起什么作用。然而,从10g以后,ORDER BY会抑制HASH GROUP BY方法的使用,因此可能会降低性能。
相关问题
oracle临时表空间
Oracle临时表空间是用来管理数据库排序操作以及存储临时表、中间排序结果等临时对象的空间。当Oracle需要进行排序操作时,如果PGA中sort_area_size大小不够,就会将数据放入临时表空间里进行排序。临时表空间在数据库中的一些操作中会被使用,例如CREATE INDEX、ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、UNION ALL、INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等。当操作完成后,系统会自动清理临时表空间中的临时对象,但实际上占用的磁盘空间并没有真正释放,只是被标记为空闲,可以重用。为了释放没有使用的空间,可以通过收缩临时表空间来实现。在Oracle 11g中,新增了收缩临时表空间的功能。
阅读全文