Oracle 分区表及索引(三)

4、常用视图:

(1)查询当前用户下有哪些是分区表:

SELECT * FROM USER_PART_TABLES;

 

(2)查询当前用户下有哪些分区索引:

SELECT * FROM USER_PART_INDEXES;

 

(3)查询当前用户下分区索引的分区信息:

SELECT * FROM USER_IND_PARTITIONS T

WHERE T.INDEX_NAME= 

 

(4)查询当前用户下分区表的分区信息:

SELECT * FROM USER_TAB_PARTITIONS T

WHERE T.TABLE_NAME= ;

 

(5)查询某分区下的数据量:

SELECT COUNT(*) FROM TABLE_PARTITION PARTITION(TAB_PARTOTION_01);

 

(6)查询索引、表上在那些列上创建了分区:

SELECT * FROM USER_PART_KEY_COLUMNS;

 

(7)查询某用户下二级分区的信息(只有创建了二级分区才有数据):

SELECT * FROM USER_TAB_SUBPARTITIONS;

 

5、回归总结:何时建分区,分区类别,索引,如何对应SQL

 

(1)创建时机

     上述已经说明,2G以上的表,ORACLE推荐创建分区。

     分区的方式根据实际情况而定,才能提高整体性能。

     分区的字段一定要是经常用以提取数据的字段,否则会在提取过程中导致遍历多个分区,这样比没有分区还要慢。

     分区字段要选择合适,数据较为均匀分布到各个分区,不要太多也不要太少,而且根据分区字段可以很快定位到分区范围。

     一般情况下,尽量然业务操作在同一个分区内部完成。

 

(2)分区类别

    分区主要有RANGE、LIST、HASH;

     RANGE通过值的范围分区,也是最常用的分区,这种分区注意在一种变长数字字符串中,很多人会导致认为是数字类型,而按照数字区分区,这样会分布十分不均匀的现象发生。

     LIST是列举方式进行分区,一般作为二级分区而存在(当然也可以自己分区,ORACLE 11G后在分区上也可以作为主分区而存在),在RANGE基础上,若数据需要继续分区,并且在RANGE基础上数据量较为固定,只是较大,可以按照一定规则进一步分区。

     HASH只指定分区个数,分区细节由ORACLE完成,增加HASH分区可以重新分布数据。

     注意:分区字段不能使用函数转换后在分区,如,将某数字字符串字段,先TO_NUMER(COL_NAME)后分区。

 

(3)索引类别

    大致分:GLOBAL索引和LOCAL索引,还可以分:GLOBAL不分区索引,和GLOBAL分区索引。

     GLOBAL不分区索引一般不太推荐,因为是用一颗大的索引树来映射一个表,这个过程,这样速度不见得比不分区快。

     GLOBAL分区索引,查找数据若通过要通过索引,是先定位了索引内部的分区,然后在这个分区索引中找到ROWID,然后回表提取数据。

     LOCAL索引是和分区的个数逐个对应的,可以说先定位分区表的分区也可以说先定位索引的分区,因为他们是一一对应的,找到对应分区后,分区内部索引数据集合。

 

(4)对应应用

     分区表、索引、分区索引,要利用其性能优势,最基本就是要提取数据时,要通过它首先将数据的范围缩小到一个即使做全盘扫描也不会太慢的情况。

      所以SQL一定要有分区上的这个字段的一个WHERE条件,将数据迅速定位到分区内部,而且尽量定位到一个分区里面(这个和创建分区的规则有关系)。

      建立分区本身不提要性能,要用好才可提高性能,在必要的RAC集群中,若存在多分区提取数据,适当采用并行提取可以提高提取的速度。

      对于索引部分,这里也只提到分区索引的创建方式以及常见索引的维护方式,对于索引原理理解后会更容易认识到提取数据时的技巧。

oracle视频教程请关注: http://home.51cto.com/apps/download/index.php?s=/Index/index/uid/4202939

你可能感兴趣的:(oracle,Oracle分区表,oracle索引,Oracle分区表索引)