完成本课程的学习后,您应该能够:

•普通堆表优点和缺点
•理解rowid
•全局临时表优点、缺点和适用场景
•分区表的类型和原理、优点和缺点、适用场景
•表字段的高效设计
•sequence的设计
 
1.数据存储方式
  • 在关系数据库中有很多种数据存储方式,有些DBMS全部支持,有些则只支持其中的一部分。数据库的存储方式至关重要,它对数据的修改和查询都有直接的影响。
  • 存储方式可分为两种:随机存储方式和固定存储方式。前者存储效率必然要高于后者。但如我们的人生一样,得到多少就意味着要失去多少。
  • 随机存储方式在写入数据时可以轻而易举的进行存储,在查询时候则要付出更高的代价;
  • 固定存储方式在写入数据时花费了时间和精力,则在查询上获得性能的提升。
2.堆表
  堆表的最大特征就是数据的存储独立性,即数据的存储与数据值没有任何关联地被存储在磁盘的任意位置上(允许数据被存储在磁盘的任意位置上)。

     从另一个角度看,随机存储方式就是数据所占用的位置分散到不同的数据块上。由于数据被分散地存储在多个数据块上,数据的读取效率也同样的会随着它们的分散程度的不同而不同,即分散程度越高,数据读取效率越低;分散程度越低,数据读取效率越高。

2.1堆表的优、缺点

•优点

      语法简单,使用方便

•缺点
  表更新产生redo开销大
  delete无法释放空间
  表记录太大检索较慢
  索引回表开销大
  即使有序插入,难有序读出
•适用场景

     适用大部分场景

实验2.1 测试Redo大小

http://blog.csdn.net/guogang83/article/details/7848974
测量redo脚本:
create or replace view v_measure_redo_size
as select name, value
  from v$mystat, v$statname
 where v$mystat.statistic# = v$statname.statistic#
   and v$statname.name = 'redo size';

测量redo、undo脚本:
create or replace view v_measure_redo_undo_size
as select name, value
  from v$mystat, v$statname
 where v$mystat.statistic# = v$statname.statistic#
   and (v$statname.name = 'redo size' or
       v$statname.name = 'undo change vector size');
测量Redo、undo脚本
SQL> create table test as select * from dba_objects;

SQL> select segment_name,bytes/1024/1024 from user_segments s where s.segment_name='TEST';
SEGMENT_NAME               BYTES/1024/1024
------------------------- ---------------
TEST                             6

SQL> select * from v_measure_redo_size;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size     
                                                        86644
SQL> delete from test;
SQL> commit;

SQL> select * from v_measure_redo_size;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          18293628

SQL> select (18293628-86644)/1024/1024 from dual;
(18293628-86644)/1024/1024
--------------------------
                 17.363533
SQL> insert into test select * from dba_objects;
SQL> commit;
SQL> create index ind_object_id on test(object_id);

SQL> select * from v_measure_redo_size;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          24878160
SQL> delete from test;
SQL> commit;
SQL> select * from v_measure_redo_size;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          53255224
SQL> select (53255224-24878160)/1024/1024 from dual;
(53255224-24878160)/1024/1024
-----------------------------
                   27.0624771
表理新产生redo开销大
SQL> drop table test purge;
SQL> create table test as select * from dba_objects;

SQL> set autotrace on
--第二次执行此SQL语句的结果
SQL> select count(*) from test;
SQL> set autotrace off
SQL> set autotrace on
SQL> delete from test;
已删除50417行。
SQL> commit;

SQL> select count(*) from test;
  COUNT(*)
----------
         0

SQL> truncate table test;
SQL> select count(*) from test;
  COUNT(*)
----------
         0
delete无法释放空间

相关文章:

  • 2021-11-30
  • 2021-10-06
  • 2021-09-02
  • 2021-08-17
  • 2021-11-30
  • 2021-12-04
猜你喜欢
  • 2022-12-23
  • 2021-11-06
  • 2022-12-23
  • 2021-12-07
  • 2021-06-27
  • 2021-07-22
  • 2021-09-03
相关资源
相似解决方案