创建查询分区表和索引

来源:互联网 发布:node调用webservice 编辑:程序博客网 时间:2024/05/19 22:26

查看分区表的信息

select TABLE_NAME,PARTITION_NAME,PARTITIONING_TYPE,SUBPARTITION_COUNT,PARTITION_COUNT,PARTITION_POSITION,TABLESPACE_NAME,NUM_ROWS,BLOCKS,AVG_SPACE,CHAIN_CNT,LAST_ANALYZED,STATUS,,COMPOSITE,DEF_TABLESPACE_NAME FROM ALL_PART_TABLES A,ALL_TAB_PARTITIONS  B WHERE  A.TABLE_NAME=B.TABE_NAME AND A.TABLE_NAME='SALES_HISTORY'

SELECT * FROM ALL_PART_KEY_COLUMNS WHERE NAME='SALES_HISTORY';

查看列的统计信息

SELECT TABLE_NAME,PARTITION_NAME,COLUMN_NAME,NUM_DISTINCT,LOW_VALUE,HIGH_VALUE,DENSITY,NUM_NULLS,LAST_ANALYZED FROM ALL_PART_COL_STATISTICS WHERE TABLE_NAME='SALES_HISTORY';


select segment_name,partition_name,segment_type,tablespace_name from dba_segments where tablespace_name like 'P%';

查看分区索引信息

select index_name,table_name,partitioning_type,partition_count from user_part_indexes where table_name='SALES_HISTORY';

select index_name,partition_name,status,tablespace_name,blevel,leaf_blocks,distinct_keys from user_ind_partitions;


创建范围索引分区表

CREATE TABLE sales
    ( invoice_no NUMBER,
      sale_year  INT NOT NULL,
      sale_month INT NOT NULL,
      sale_day   INT NOT NULL )
  PARTITION BY RANGE (sale_year, sale_month, sale_day)
    ( PARTITION sales_q1 VALUES LESS THAN (1999, 04, 01)
        TABLESPACE tsa,
      PARTITION sales_q2 VALUES LESS THAN (1999, 07, 01)
        TABLESPACE tsb,
      PARTITION sales_q3 VALUES LESS THAN (1999, 10, 01)
        TABLESPACE tsc,
      PARTITION sales_q4 VALUES LESS THAN (2000, 01, 01)
        TABLESPACE tsd );

下面的是创建了hash分区,将数据放到了gear1,gear2,gear3,gar4这4个表空间中

CREATE TABLE scubagear
     (id NUMBER,
      name VARCHAR2 (60))
   PARTITION BY HASH (id)
   PARTITIONS 4
   STORE IN (gear1, gear2, gear3, gear4);

下面的是列表分区CREATE TABLE q1_sales_by_region
      (deptno number,
       deptname varchar2(20),
       quarterly_sales number(10, 2),
       state varchar2(2))
   PARTITION BY LIST (state)
      (PARTITION q1_northwest VALUES ('OR', 'WA'),
       PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'),
       PARTITION q1_northeast VALUES  ('NY', 'VM', 'NJ'),
       PARTITION q1_southeast VALUES ('FL', 'GA'),
       PARTITION q1_northcentral VALUES ('SD', 'WI'),
       PARTITION q1_southcentral VALUES ('OK', 'TX'));


可以再堆表和索引组织表上创建分区表,除了包含long或long raw的表。可以创建非分区全局索引,范围或hash分区全局索引,在分区表上创建本地索引。

判断一条记录在哪个分区上 方法一------------------------------------------------------------------------------

SQL> select dbms_rowid.rowid_object('AAAM1SAAHAAAADSABP') from dual;

DBMS_ROWID.ROWID_OBJECT('AAAM1SAAHAAAADSABP')
---------------------------------------------
                                        52562

SQL> select subobject_name,object_name from dba_objects where object_id=52562;

SUBOBJECT_NAME OBJECT_NAME
--------------------------------------------------------------------------------

P2 SALES_HISTORY

方法二---------------------------------------------------------------------------------------------------------

SQL> select dbms_rowid.rowid_relative_fno('AAAM1SAAHAAAADSABP') from dual;

DBMS_ROWID.ROWID_RELATIVE_FNO('AAAM1SAAHAAAADSABP')
---------------------------------------------------
                                                  7

SQL> select dbms_rowid.rowid_block_number('AAAM1SAAHAAAADSABP') from dual;

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAM1SAAHAAAADSABP')
---------------------------------------------------
                                                210

SQL> select owner,file_id,segment_name, segment_type, block_id, partition_name f
rom dba_extents where  file_id=7 and block_id<=210 and (block_id + blocks- 1) >=
 210;

OWNER                             FILE_ID
------------------------------ ----------
SEGMENT_NAME
--------------------------------------------------------------------------------

SEGMENT_TYPE         BLOCK_ID PARTITION_NAME
------------------ ---------- ------------------------------
SYS                                     7
SALES_HISTORY
TABLE PARTITION           137 P2


查看一个分区上有多少记录,需要收集统计信息,否则是空的,不准确的。

select table_name,partition_name,num_rows from dba_tab_partitons;

 select count(*) from sales_history partition(p1);


创建范围分区全局索引

CREATE INDEX month_ix ON sales(sales_month)
   GLOBAL PARTITION BY RANGE(sales_month)
      (PARTITION pm1_ix VALUES LESS THAN (2)
       PARTITION pm2_ix VALUES LESS THAN (3)
       PARTITION pm3_ix VALUES LESS THAN (4)
       PARTITION pm4_ix VALUES LESS THAN (5)
       PARTITION pm5_ix VALUES LESS THAN (6)
       PARTITION pm6_ix VALUES LESS THAN (7)
       PARTITION pm7_ix VALUES LESS THAN (8)
       PARTITION pm8_ix VALUES LESS THAN (9)
       PARTITION pm9_ix VALUES LESS THAN (10)
       PARTITION pm10_ix VALUES LESS THAN (11)
       PARTITION pm11_ix VALUES LESS THAN (12)
       PARTITION pm12_ix VALUES LESS THAN (MAXVALUE));

创建一个hash分区全局索引

CREATE INDEX hgidx ON tab (c1,c2,c3) GLOBAL
     PARTITION BY HASH (c1,c2)
     (PARTITION p1  TABLESPACE tbs_1,
      PARTITION p2  TABLESPACE tbs_2,
      PARTITION p3  TABLESPACE tbs_3,
      PARTITION p4  TABLESPACE tbs_4);








0 0
原创粉丝点击