12.读书笔记收获不止Oracle之 索引分区表

前端之家收集整理的这篇文章主要介绍了12.读书笔记收获不止Oracle之 索引分区表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

12.读书笔记收获不止Oracle之 索引分区表

普通堆表操作的不足之处:执行select * from t where id=1.

先从索引中获取rowid,然后定位到表中,获取id以外的其他列的动作,这就是回表

如何不进行回表?

采用索引组织表。

来看个例子,创建堆表:

create table heap_addresses

(empno number(10),

addr_type varchar2(10),

street varchar2(10),

city varchar2(10),

state varchar2(2),

zip number,

primary key(empno)

);

创建索引组织表:

create table iot_addresses

(empno number(10),

primary key(empno)

)

Organization index;

往堆表插入:

sql> insert into heap_addresses selectobject_id,'WORK','123street','washington','DC',20123 from all_objects;

89752 rows created.

往索引组织表插入:

sql> insert into iot_addresses selectobject_id,20123 from all_objects;

然后commit;

进行性能测试对比:

Set linesize 1000

Set autotrace traceonly

Select * from heap_addresses where empno=22;

Execution Plan

----------------------------------------------------------

Plan hash value: 2900288143

----------------------------------------------------------------------------------------------

| Id| Operation | Name | Rows| Bytes | Cost (%cpu)| Time |

----------------------------------------------------------------------------------------------

| 0| SELECT STATEMENT | | 1 | 50 | 1(0)| 00:00:01 |

| 1| TABLE ACCESS BY INDEX ROWID|HEAP_ADDRESSES | 1 | 50 | 1(0)| 00:00:01 |

|* 2| INDEX UNIQUE SCAN | SYS_C0010415 | 1 | | 1(0)| 00:00:01 |

----------------------------------------------------------------------------------------------

Predicate Information (identified byoperation id):

---------------------------------------------------

2- access("EMPNO"=22)

Statistics

----------------------------------------------------------

1recursive calls

0 dbblock gets

4consistent gets

0physical reads

132 redo size

770 bytes sent via sql*Net to client

540 bytes received via sql*Net from client

1sql*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

1 rowsprocessed

再执行索引组织表:

Select * from iot_addresseswhere empno=22;

Execution Plan

----------------------------------------------------------

Plan hash value: 826554505

---------------------------------------------------------------------------------------

| Id| Operation | Name | Rows| Bytes | Cost (%cpu)| Time |

---------------------------------------------------------------------------------------

| 0| SELECT STATEMENT | |1 | 50 | 1 (0)|00:00:01 |

|* 1| INDEX UNIQUE SCAN| SYS_IOT_TOP_93653| 1 | 50 |1 (0)| 00:00:01 |

---------------------------------------------------------------------------------------

Predicate Information (identified byoperation id):

---------------------------------------------------

1- access("EMPNO"=22)

Statistics

----------------------------------------------------------

1recursive calls

0 dbblock gets

2consistent gets

0physical reads

0 redosize

910 bytes sent via sql*Net to client

551 bytes received via sql*Net from client

2sql*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

1 rowsprocessed

普通表有:TABLE ACCESS BY INDEX ROWID ,索引组织表没有。

索引组织表的最大特性,就是表就是索引,索引就是表,是一种很特别的设计,无须访问表。

不过表的更新要比普通表开销更大。因为表要和索引一样有序地排列,更新负担将会非常严重。这种设计使用再很少更新、频繁读的应用场合。

原文链接:https://www.f2er.com/oracle/207078.html

猜你在找的Oracle相关文章