表的学习笔记

表的学习笔记本(除了列出的表之外,还有分区表和外部表,在此不一一列出):

1.heap table:
1.1 堆表。最常用,插入数据时,到HWM以下的空块。对于mssm,大于pctfree就从freelist中去掉,小于pctused时加到freelist

参数修改:

=========================================

2.IOT table:
2.1 索引组织表。适用:数据可以物理的在一起,减少io。如果每天话单的导入、如同一个owner,同一个object_type的各个object_name.
因此,给定一个时间点(某一天)或者给定的一个owner,相关的记录会放在同一个或者附件的块上。

注:索引压缩:analyze index index_name validate structure;
select NAME,USED_SPACE,OPT_CMPR_COUNT,OPT_CMPR_PCTSAVE from index_stats;
查看建议的压缩层数。

=========================================

3.index clustered table
3.1 聚簇表。相近内容的“扎堆”(不同于IOT,IOT不仅仅会“扎堆”,而且还“有序”),和数据的加载顺序有关:
如果加载顺序是depno:1,2,3……则depno为1会在一个块,为2的也会在一个块,且可能是和depno为1的在同一个块。
如果加载顺序是depno:1,9,2……则depno为1会在一个块,为9的也会在一个块,且可能是和depno为1的在同一个块。但是depno为2的在一个块,但是和depno为1的不在一个块。
即数据扎堆,但不有序。
3.2 建立步骤:
3.2.1 create cluster
3.2.2 create index for cluster
3.2.3 create table need cluster
3.2.4 加载数据到表中
注:以上3.2.2和3.2.3顺序可以调换。

3.3 范例:

Cluster created.
注:size的大小很重要,每个块能放下簇的数量为:假设数据块为8k,则floor(8000/1024)=7,即每个块最多能放下7个depno的数据
因此size愈大,一个块中能容下最多cluster的数量越小。

=========================================

4.hash clustered table
4.1 哈希聚簇表。块会在创建时分配。
一般理想情况是hash键分布均匀,有一个hash函数可以将数字均匀分布到已经分配的块上。查询时利用一个io就能得到数据(走索引需要3个io)。
size过低的话,一个块中能容纳多个cluster,但是容易发生溢出,形成块串联。

Cluster created.
4.2 注意块在创建时候分配的空间为:hashkeys/trunc(dbblocksize/size),即1000/trunc(8000/8192),即hashkeys/(每个块上cluster的数量),即有1000/每个块上2个cluster键值,得需要200个块。
适用范围:hashkey:能预估到有多少个cluster,且每个cluster的数据尽量能均匀分布。注意where不要用范围检索,
4.3 特例:单表hash cluster:
适合于按照主键来访问的表,但是不关心是否聚簇。

注意number型的要在后面加hash is XXX(某个number型的字段),因为number是有精度的,在这边做hashkey要求是整形。

=========================================

5.sorted hash clustered table(10G新增)
5.1 有序哈希聚簇表。一般用于按照某个键值查询,但是按照另外一个键值排序。数据的加载建议按照sort的字段按顺序来。

=========================================

6.nested table:
6.1 嵌套表一般用于plsql编程,不常用于作为数据存储。(每行都可能有一个虚拟表)
6.2 步骤:
6.2.1 create type type_O as object(…)
6.2.2 create type type_T as table of type_O
6.2.3 create table table_A
(col_a type_a,col_b type_b,col_c type_T)
nested table col_c /* indeed,col_c is a table */
store as table_B; /* here table_B can be physical store in dbfile */
6.2.4 alter table_B add constraint unique(column_of_table_B);

6.3 范例:

6.4 数据的加载:

6.5 数据的显示:

注:作为被存储的嵌套表,不能直接select:

=========================================

7.temporary table:
注:一般dbms_stats不收集临时表的统计信息,但是可以加gather_temp=>true,或者dbms_stats.set_table_stats来指定。

=========================================

8.object table:
与嵌套表类似,先定义type,再定义table
8.1 create type type_1 as object;
create type type_2 as object;
create table t1 as type_2;

8.2 范例:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据