暂无图片
oracle的表结构
最近更新:2023-01-06 14:37:30
  • 表,数据库中最基本的数据存储单元,数据在数据库中的存储形式是行和列。
  • 一个行,就是由表中定义的列相应的具体值组成的。
  • 理论属性
    • 表的字段数最大可达到1000。
    • 表的记录行,可以无限。
    • 一个表可以有无限个索引。
    • 数据库可以存储的表数量不受限制。

注意:理论上是这样的,至少数据库本身是支持的,但实际上可能受到操作系统或其他方面的限制。

表的分类

image.pngAlt text

1)常规表

  • 常规表(通常称为 “表”)是存储用户数据最常用的形式,它是缺省表。
  • 数据库管理员对表中行分布的控制很有限。
  • 行可能按任意顺序存储,具体顺序取决于在表中进行的操作。
  • 表里的每行数据可以按用户指定的顺序排序。
  • 每个表在数据库中对应一个segment。
  • 数据存储方式是堆表形式。
    • 堆组织表中,数据以堆的方式管理。
    • 增加数据时,会使用段中找到的第一个能放下此数据的自由空间。
    • 从表中删除数据后,允许以后的INSERTUPDATE重用这部分空间。
    • 堆(heap)是一组空间,以一种随机的方式使用。因此,无法保证按照放入表中的顺序取得数据
    • 堆表具有的唯一优点是 插入数据不需要采取任何措施,只需要顺其自然地插入的顺序存储。

2)分区表

  • 每个分区表有一个或多个分区,每个分区存储已分区(使用范围分区、散列分区、组合分区或列表分区)的行。
  • 分区表中的每个分区为一个段,可各自位于不同的表空间中。
  • 对于能够同时使用几个进程进行查询或操作的大型表,分区非常有用。
  • 分区表最主要的一个作用就是大表转化为小表的形式存储数据,
  • 不同分区的数据是存储在不同的segment,分区上可以建立分区索引,称为本地索引。
  • 分区表可以提高表的访问速度,特别是大表,因为数据是存储在不同分区segment。
# 查询某个分区的数据:
SQL> select * from time_range_sales partition(SALES_2001);
# 查看与分区相关的字典:
SQL> select table_name from dict where lower(table_name) like '%part%' order by 1;
# 分区表本身的信息:
SQL> select TABLE_NAME,PARTITIONING_TYPE,PARTITION_COUNT
  2  from dba_part_tables
  3  where table_name='TIME_RANGE_SALES';
# 查询分区信息:
SQL> select table_name,partition_name,tablespace_name,high_value
  2  from dba_tab_partitions where table_name = 'TIME_RANGE_SALES'
  3  order by 2;

分区类型有: 1)range partition 范围分区

CREATE TABLE time_range_sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
(PARTITION SALES_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
PARTITION SALES_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
......