基本数据库对象管理

parallel :创建表时,指定PARALLEL子句,向表中以批量方式插入数据时是以并行方式进行的。

LOGGING:不希望产生重做日志,在创建表时加上关键字NOLOGGING。好处是减少了重做日志文件的存储空间,减少了处理时间,提高了效率。

COMPRESS:在一个数据块中两行完全相同的数据被压缩为一行,并存储在数据块的开头。


创建临时表命令CREATE GLOBAL TEMPORARY TABLE ,通过ON COMMIT子句制定临时数据的范围

ON COMMIT DELETE ROWS:事务级

ON COMMIT PRESERVE ROWS:会话级


表的移动

使用ALTER TABLE 命令,在移动表时,先为表创建一个新的表段,再把表中的数据移动到新的表段,最后删除原来的表段。

ALTER TABLE TB1 MOVE;

ALTER TABLE TB2 MOVE TABLESPACE TBS1;

需要注意的是,表被移动后,表上的行号将发生改变,表上原来的索引将不可用,需要将表上的索引删除后再重新创建。


手工为表分配区

ALTER TABLE TB1 ALLOCATE EXTENT (SIZE 50K);

在表段的HWM下,可能有些尚未被使用的数据块,可以使用

ALTER TABLE TB1 DEALLOCATE UNUSED;


表的删除

数据库对象被删除后,是被放到回收站中(RECYCLEBIN),存储空间并不是立即释放。

如果要清除表并立即释放存储空间用PURGE ,即 DROP TABLE TB1 PURGE;

回收站中的数据库对象也可以清除,使用PURGE,   purge  tablespace tbs1/purge recyclebin/purge user scott

如果一个数据库对象被删除了,需要回复可以用FALSHBACK命令

FLASHBACK TABLE TB1 TO BEFORE DROP (RENAME TO TB2);


分区管理

范围分区

按照某个列或者几个列的值得范围创建分区

首先要指定按照那些列进行分区,然后要为每个分区指定数据范围

例如

   CREATE TABLE TB1 (ID NUMBER)  

     PARTITION BY RANGE (ID)   

     (PARTITION P1 VALUES LESS THAN (3) TABLESPACE TBS1,

      PARTITION P2 VALUES LESS THAN (6) TABLESPACE TBS2,

      PARTITION P3 VALUES LESS THAN (9) TABLESPACE TBS3);

查找那个分区的数据是需指定   SELECT * FROM TB1 PARTITION(P1);


列表分区

列上的数据是相对固定的值,可以考虑用列表分区。一般来说,数字型或者日期型的数据,适合范围分区,字符串型的数据,适合列表分区。

例如

   CREATE TABLE TB2  (CITY CHAR(8))

  PARTITION BY LIST(CITY)

  (PARTITION P1 VALUES ('北京','上海'),

   PARTITION P2 VALUES ('河南','山东')

);


散列分区

无法预测某个列上数据的变化范围,根据散列函数对数据进行计算,把数据均匀地分布在各个分区中。

CREATE TABLE TB3(CITY VARCHAR2(20))

PARTITION BY HASH(CITY)

(PARTITION P1,

PARTITION P2,

PARTITION P3

);

 

复合分区

先对表进行范围分区,然后对每个分区进行散列分区或者列表分区,产生若干子分区。

根据子分区的划分方法不同,可分为   范围分区-散列分区和范围分区-列表分区

例如

    CREATE TABLE TB4

    (ID NUMBER,CITY CHAR(10))

    PARTITION BY RANGE(ID)

    SUBPARTITION BY HASH(CITY)

    (PARTITION P1 VALUES LESS THAN (3)

         (SUBPARTITION P11,

         SUBPARTITION P12),

   PARTITION P2 VALUES LESS THAN (6)

         (SUBPARTITION P21,

           SUBPARTITION P22

          ),

     PATITION P3 VALUES LESS THAN (9)

        (SUBPARTITION P31,

         SUBPARTITION P32

         )

);


总之,创建子分区的母的是吧数据的查询或统计限制在一定范围,减少磁盘I/O。

索引的管理

它是建立在表的一个或多个列上,目的是为了提高该表上的查询速度。

手工创建索引或者在表上指定主键约束或者唯一性约束时自动创建。

虽然建立在某个表之上,但是一般情况下它被单独存放在一个索引段中。

需要注意的是,在创建索引时是不能使用PCTUSED,CACHE子句。


反向索引

如果一个列上的值已经有序,或者基本有序,那么该列上建立索引时,应选择反向索引。只需要使用REVERSE关键字。

      例如       CREATE INDEX IDX_1 ON  TB1(ID) REVERSE;


为了使用反向索引,首先要对表进行分析,收集统计它的数据。

ANALYZE TABLE EMP COMPUTE STATISTICS;


位图索引

如果一个表中某个列上的重复值很多,那么适合创建位图索引

在位图索引中,为索引列上每个不同的值分配一个位图,这个不同的值称为键值。表中每行数据在位图中对应一个二进制位,如果改行中索引列上的值与键值相同,那么对应的二进制位是1,否则为0;

例如:

       键值                 位图

      10          00000110010

       20         10010000000

       30          0 1100000000

CREATE BITMAP INDEX IDX_2 ON EMP(ID);

使用位图的好处:减少索引所占用的磁盘空间,表中的每行数据在位图索引的每个位图中只占用一个二进制位。二是加快查询速度


如果一个表比较大,创建位图索引可能需要更长的时间,为了加快创建索引的速度,可以通过初始化参数CREATE_BITMAP_AREA_SIZE在SGA中为其制定更大的内存空间。

位图索引不能直接起作用,在SELECT 子句中通过关键字INDEX_COMBINE指定提示

例如    SELECT /*+  index_combine(tb1   col1)*/ sum(sal) from tb1;


基于函数的索引

将索引建立在某个函数或者某个表达式的基础上。


create  INDEX IDX_3 ON TB1(函数(列名));


分区索引

建立在分区表之上的索引。

全局索引和分区索引

全局索引的数据将存储在同一个索引段中,分区索引将数据存储在若干个索引段中。


在创建索引语句中后面加GLOBAL/ LOCAL.


索引的维护

ALTER INDEX

对于因施加主键约束或者唯一性约束而产生的索引,则需要执行ALTER TABLE命令修改它的存储参数

ALTER TABLE ENABLE PRIMARY KEY USING INDEX。。。。


重建索引

ALTER INDEX IDX_1 REBUILD;

在线创建索引   ALTER INDEX IDX_1 REBUILD ONLINE;

合并索引    ALTER INDEX IDX_2 COALECSE;









你可能感兴趣的:(基本数据库对象管理)