2、行的分组
Oracle有两个内部操作在将类似的记录组织在一起的过程中对行进行分类:
(1)、Sort aggregate操作
(2)、Sort group by操作
·它们与分组函数结合在一起使用,例如:
select max(salary) from emp
为了完成这个查询,优化器将执行两个独立的操作:
1)、Table aclearcase/" target="_blank" >ccess full操作从表中选择salary值;
2)、利用Sort aggregate操作对行进行分析,该操作将向用户返回最大的salary值,
这个查询在读出所有记录且完成Sort aggregate操作之前,将不返回最大的salary值。
·使用group by子句的查询将使用Sort group by操作。
例如:select deptno,count(salary) from emp group by deptno;
为了完成这个查询Oracle将执行一个Table access full操作,此查询没有限定条件,故不会使用索引,
因为使用了group by子句,所以,Table access full操作返回的行将由Sort group by操作来处理,一旦
所有的行都分成组,且每个组的计数都已计算出来,则将结果返回给用户。
注意:如果应用程序不要求在给出查询的输出前对所有的行进行分类,则可以考虑使用fist_rows提示,该
提示会告诉优化器尽量不使用进行集合操作的执行路径!