【读书笔记】【收获,不止Oracle】索引组织表

本次试验,用于讨论索引组织表与普通表的区别:

1.创建两个表:heap_addresses(普通表),iot_addresses(索引组织表)

SYS@ orcl>drop table heap_addresses purge;

Table dropped.

SYS@ orcl>drop table iot_addresses purge;

Table dropped.

SYS@ orcl>create table heap_addresses (
  2  empno number (10),
  3  addr_type varchar2(10),
  4  street varchar2(10),
  5  city varchar2(10),
  6  state varchar2(2),
  7  zip number,
  8  primary key(empno)
  9  )
 10  /

Table created.

SYS@ orcl>create table iot_addresses (
  2  empno number (10),
  3  addr_type varchar2(10),
  4  street varchar2(10),
  5  city varchar2(10),
  6  state varchar2(2),
  7  zip number,
  8  primary key(empno)
  9  )
 10  organization index
 11  /

Table created.

 2.向两个表投入相同的数据 

SYS@ orcl>insert into heap_addresses 
  2  select object_id,'WORK','123street','washington','DC',20123
  3  from all_objects;

49896 rows created.

SYS@ orcl>insert into iot_addresses 
  2  select object_id,'WORK','123street','washington','DC',20123
  3  from all_objects;

49896 rows created.

SYS@ orcl>commit;

Commit complete.

3.执行查看计划,首先查看普通表

SYS@ orcl>set linesize 1000
SYS@ orcl>set autotrace traceonly
SYS@ orcl>select * from heap_addresses
  2  where empno=22;


Execution Plan
----------------------------------------------------------
Plan hash value: 1273877215

----------------------------------------------------------------------------------------------
| 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_C006637    |     1 |       |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("EMPNO"=22)


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          5  consistent gets
          0  physical reads
        124  redo size
        627  bytes sent via SQL*Net to client
        370  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

4.接着查看索引组织表

SYS@ orcl>select * from iot_addresses
  2  where empno=22;


Execution Plan
----------------------------------------------------------
Plan hash value: 2496347326

---------------------------------------------------------------------------------------
| 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_54159 |     1 |    50 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("EMPNO"=22)


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          4  consistent gets
          0  physical reads
        124  redo size
        719  bytes sent via SQL*Net to client
        381  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

总结:

普通表 索引组织表
1.consistent gets(逻辑读)  5 4
由此可见,索引组织表比普通表要产生更少的逻辑读。

2.普通表产生 TABLE ACCESS BY INDEX ROWID 来获取列以外的信息
3.索引组织表特点:表 = 索引 ,索引更新会比普通表开销更大。表和索引一样有序的排列,更新负担会加重。
4.索引组织表一般用于很少更新,频繁读的应用场合。用于数据很少变动,却大量读取的场合。(如地区配置表)

以上代码和观点摘自原书,试验由本人试验,所以与原书略有不同。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值