hmwh

11G R2环境:

--DISTINCT测试前的准备
drop table t purge;
create table t as select * from dba_objects;
update t set object_id=rownum;
alter table T modify OBJECT_ID not null;
update t set object_id=2;
update t set object_id=3 where rownum<=25000;
commit;

/****
在oracle10g的R2环境之后,DISTINCT由于其 HASH UNIQUE的算法导致其不会产生排序,其调整的 ALTER SESSION SET "_gby_hash_aggregation_enabled" = FALSE
****/
set linesize 1000
set autotrace traceonly

select distinct object_id from t ;
执行计划:

 

可以看出以上语句执行计划,占用内存1448k,逻辑读1276。

/*不过虽然没有排序,通过观察TempSpc可知distinct消耗PGA内存进行HASH UNIQUE运算,
接下来看看建了索引后的情况,TempSpc关键字立即消失,COST也立即下降许多,具体如下*/

 

--为T表的object_id列建索引
create index idx_t_object_id on t(object_id);
set linesize 1000
set autotrace traceonly

select /*+index(t)*/ distinct object_id from t ;

 

 

 可以看出cost525,走的索引,没有进行排序,逻辑读也降低了176。

 

分类:

ORACLE

技术点:

相关文章:

  • 2021-09-12
  • 2021-07-20
  • 2021-12-21
  • 2021-06-01
  • 2022-03-04
  • 2021-11-26
  • 2021-11-28
猜你喜欢
  • 2021-10-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-02
  • 2021-12-12
  • 2022-12-23
相关资源
相似解决方案