java分区索引_表分区与索引分区

一:前言

931692ff9d60e0d50c99445396c5a328.png

二:分区技术概述247f7f6104b2e20fa9272d1e30840cf8.png

三:创建表分区

1:范围分区dffa668cf1864ac18c61c8a89d90f3de.png8c127543d1b20f33f5a3a6621f4ebe1a.png

1 ----创建一个商品零售表,然后为该表按照销售日期所在季度创建4个分区

2

3 SYSTEM@orcl> ho clear

4

5

6 SYSTEM@orcl> select tablespace_name from dba_data_files;

7

8 TABLESPACE_NAME

9 ------------------------------

10 USERS

11 UNDOTBS1

12 SYSAUX

13 SYSTEM

14 EXAMPLE

15 TBS_TEST1

16 TBS_TEST_3

17 TBS_TEST4

18 TBS_TEST5

19 TBS_BIG_1

20

21 10 rows selected.

22

23 SYSTEM@orcl> conn scott/scott;

24 Connected.

25 SCOTT@orcl> create table ware_retail_part --创建一个描述商品零售的数据表

26 2 (

27 3 id integer primary key,--销售编号

28 4 retail_date date,--销售日期

29 5 ware_name varchar2(50)--商品名称

30 6 )

31 7 partition by range(retail_date)

32 8 (

33 9 --2011年第一个季度为part_01分区

34 10 partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBS_TEST1,

35 11 --2011年第二个季度为part_02分区

36 12 partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBS_TEST_3,

37 13 --2011年第三个季度为part_03分区

38 14 partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBS_TEST4,

39 15 --2011年第四个季度为part_04分区

40 16 partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TBS_TEST1

41 17 );

42

43

44 Table created.

45

46 SCOTT@orcl> SCOTT@orcl>

4651c8928d7a5b2aa0749e4dcfb55269.png

ccddf29f18abddb5206cef57f903f28f.png

1 create table ware_retail_part2 --创建一个描述商品零售的数据表

2 (

3 id integer primary key,--销售编号

4 retail_date date,--销售日期

5 ware_name varchar2(50)--商品名称

6 )

7 partition by range(id,retail_date)--按照销售序号和销售日期分区

8 (

9 --第一个分区part_01

10 partition par_01 values less than(10000,to_date('2011-12-01','yyyy-mm-dd')) tablespace TBSP_1,

11 --第一个分区part_02

12 partition par_02 values less than(20000,to_date('2012-12-01','yyyy-mm-dd')) tablespace TBSP_1,

13 --第一个分区part_03

14 partition par_03 values less than(maxvalue,maxvalue) tablespace TBSP_2

15 );

16

d36fc2862b7d747a72592f1511c7e544.png

2: 散列分区4d8672341dd796ab4fcd3e7b9405e887.png

1 SCOTT@orcl>

2 SCOTT@orcl> conn sys/oracle as sysdba;

3 Connected.

4 SYS@orcl> select tablespace_name from dba_data_files;

5

6 TABLESPACE_NAME

7 ------------------------------

8 USERS

9 UNDOTBS1

10 SYSAUX

11 SYSTEM

12 EXAMPLE

13 TBS_TEST1

14 TBS_TEST_3

15 TBS_TEST4

16 TBS_TEST5

17 TBS_BIG_1

18

19 10 rows selected.

20

21 SYS@orcl> conn scott/scott;

22 Connected.

23 SCOTT@orcl> create table ware_retail_part3 --创建一个描述商品零售的数据表

24 2 (

25 3 id integer primary key,--销售编号

26 4 retail_date date,--销售日期

27 5 ware_name varchar2(50)--商品名称

28 6 )

29 7 partition by hash(id)

30 8 (

31 9 partition par_01 tablespace TBS_TEST1,

32 10 partition par_02 tablespace TBS_TEST4

33 11 );

34

35 Table created.

36

37 SCOTT@orcl>

1

2 SCOTT@orcl> insert into ware_retail_part3 values(99,to_date('2018-03-22','yyyy-mm-dd'),'adfadsfas');

3

4 1 row created.

5

6 SCOTT@orcl> select * from ware_retail_part3 partition(par_02);

7

8 ID RETAIL_DA WARE_NAME

9 ---------- --------- --------------------------------------------------

10 99 22-MAR-18 adfadsfas

11

12 SCOTT@orcl> select * from ware_retail_part3 partition(par_01);

13

14 no rows selected

15

16 SCOTT@orcl>

45a16fc096a3f2c624bc6853a64baca1.png

1 SCOTT@orcl> conn sys/oracle as sysdba;

2 Connected.

3 SYS@orcl> select tablespace_name from dba_data_files;

4

5 TABLESPACE_NAME

6 ------------------------------

7 USERS

8 UNDOTBS1

9 SYSAUX

10 SYSTEM

11 EXAMPLE

12 TBS_TEST1

13 TBS_TEST_3

14 TBS_TEST4

15 TBS_TEST5

16 TBS_BIG_1

17

18 10 rows selected.

19

20 SYS@orcl> conn scott/scott;

21 Connected.

22 SCOTT@orcl> create table person(

23 2 id number primary key,

24 3 name varchar2(20),

25 4 sex varchar2(2)

26 5 )partition by hash(id)

27 6 partitions 2

28 7 store in(TBS_TEST1,TBS_TEST_3);

29

30

31 Table created.

32

33 SCOTT@orcl> SCOTT@orcl>

6c5abcf4d4711e9b5a91b53c63e75291.png

1 SCOTT@orcl> conn sys/oracle as sysdba;

2 Connected.

3 SYS@orcl> select tablespace_name from dba_data_files;

4

5 TABLESPACE_NAME

6 ------------------------------

7 USERS

8 UNDOTBS1

9 SYSAUX

10 SYSTEM

11 EXAMPLE

12 TBS_TEST1

13 TBS_TEST_3

14 TBS_TEST4

15 TBS_TEST5

16 TBS_BIG_1

17

18 10 rows selected.

19

20 SYS@orcl> conn scott/scott;

21 Connected.

22 SCOTT@orcl> create table goods_1 ( --//定义包含商品信息表

23 2 id number, --编号

24 3 goodname varchar2(50) --名称

25 4 )storage(initial 2048k) ---定义表分区的初始化空间大小为 2048 kb

26 5 partition by hash(id) --创建id列作为分区键的hash表分区

27 6 ( partition par1 tablespace TBS_TEST1,

28 7 partition par2 tablespace TBS_TEST_3

29 8 );

30

31 Table created.

32

33 SCOTT@orcl>

3:列表分区698e79680b4c56a46e06535f679ef5ef.png

1 create table clients

2 (

3 id integer primary key,

4 name varchar2(50),

5 province varchar2(20)

6 )

7 partition by list(province)

8 (

9 partition shandong values('山东省'),

10 partition guangdong values('广东省'),

11 partition yunnan values('云南省')

12 );

7a49a9a8f00bacea29033b6710adbbae.png

4:组合分区1418078595e5a1d54ced74c7619ebe24.png

db645715138259a584606bc4c3151f8d.png

1

2 SCOTT@orcl> conn sys/oracle as sysdba;

3 Connected.

4 SYS@orcl> select tablespace_name from dba_data_files;

5

6 TABLESPACE_NAME

7 ------------------------------

8 USERS

9 UNDOTBS1

10 SYSAUX

11 SYSTEM

12 EXAMPLE

13 TBS_TEST1

14 TBS_TEST_3

15 TBS_TEST4

16 TBS_TEST5

17 TBS_BIG_1

18

19 10 rows selected.

20

21 SYS@orcl> conn scott/scott;

22 Connected.

23

24 SCOTT@orcl> create table person2 --创建以一个描述个人信息的表

25 2 (

26 3 pid number primary key, --个人的编号

27 4 name varchar2(20), --姓名

28 5 sex varchar2(2) --性别

29 6 )

30 7 partition by range(pid )--以id作为分区键创建范围分区

31 8 subpartition by hash(name)--以name列作为分区键创建hash子分区

32 9 subpartitions 2 store in(TBS_TEST_3,TBS_TEST4)--hash子分区公有两个,分别存储在两个不同的命名空间中

33 10 (

34 11 partition par1 values less than(5000),--范围分区,id小于5000

35 12 partition par2 values less than(10000),--范围分区,id小于10000

36 13 partition par3 values less than(maxvalue)--范围分区,id不小于10000

37 14 );

38

39 Table created.

40

41 SCOTT@orcl>

5:interval 分区2d6e3b85d46e374ee6dc8628bba03b99.png

1

2 SCOTT@orcl> conn sys/oracle as sysdba;

3 Connected.

4 SYS@orcl> select tablespace_name from dba_data_files;

5

6 TABLESPACE_NAME

7 ------------------------------

8 USERS

9 UNDOTBS1

10 SYSAUX

11 SYSTEM

12 EXAMPLE

13 TBS_TEST1

14 TBS_TEST_3

15 TBS_TEST4

16 TBS_TEST5

17 TBS_BIG_1

18

19 10 rows selected.

20

21 SYS@orcl> conn scott/scott;

22 Connected.

23 SCOTT@orcl> create table saleRecord(

24 2 id number primary key, --编号

25 3 goodsname varchar2(50),--商品名称

26 4 saledate date,--销售日期

27 5 quantity number--销售量

28 6 )

29 7 partition by range(saledate)

30 8 interval (numtoyminterval(1,'year'))

31 9 (

32 10 --设置分区键值日期小于2012-01-01

33 11 partition par_fist values less than (to_date('2012-01-01','yyyy-mm-dd'))

34 12 );

35

36 Table created.

37

38 SCOTT@orcl>

5f0c6231346b9a7a02ad3a92dd50bf00.png

四:表分区策略5cbdf33eec6faed0ecf147491d771d2f.png

五:管理表分区8d61c2e5459dae6ce6c767d7e0292f11.png

1:添加表分区e6114a992ba5faf75c90e7a591deed17.png

1 alter table clients add partition hebei values('河北省') storage(inital 10k next 20kl) tablespace tbsp_1 nologging;

2

2:  合并分区8dc5a8c2086efac3164db2a8991a93a0.png

1:合并散列分区

c56780149bd075aaf58c763cd275d1cf.png

1 SCOTT@orcl> alter table person coalesce partition;

2

3 Table altered.

4

5 SCOTT@orcl>

2: 合并复合分区

5d6e755b27691eb1aac5a385e55fb8b5.png

1

2 SCOTT@orcl> alter table person2 modify partition par3 coalesce subpartition;

3

4 Table altered.

5

6 SCOTT@orcl>

3:删除分区a6778ec02683f26422d823bd83bd1a7c.png1f3abe49c6d7d8de963d1e41ac411ddd.png

1:删除一个表分区

028c36aeed5b432f27074634c2350a11.png

b2f37b1b252ef427c919b8142aead032.png

1 SCOTT@orcl> alter table WARE_RETAIL_PART drop partition par_04;

2

3 Table altered.

4

5 SCOTT@orcl>

2:删除有数据和全局索引的表分区

b99cf5d1890ff4ca55c4e17c87aa0c57.png

1 SCOTT@orcl> alter table WARE_RETAIL_PART drop partition par_04;

2

3 Table altered.

4

5 SCOTT@orcl> select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name ='WARE_RETAIL_PART';

6

7 INDEX_NAME TABLE_NAME

8 ------------------------------ ------------------------------

9 COLUMN_NAME

10 --------------------------------------------------------------------------------

11 COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESC INDEX_TYPE

12 --------------- ------------- ----------- ---- ---------------------------

13 SYS_C0012488 WARE_RETAIL_PART

14 ID

15 1 22 0 ASC NORMAL

16

17

18 SCOTT@orcl> select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.index_name ='WARE_index';

19

20 no rows selected

21

22 SCOTT@orcl> alter index SYS_C0012488 rebuild;

23

24 Index altered.

25

26 SCOTT@orcl>

3:使用 delete  和 alter table… drop partition 语句

828bd4a041d8064d91a038f9aa855bd5.png

1 SCOTT@orcl> delete from WARE_RETAIL_PART where retail_date >=to_date('201110-01','yyyy-mm-dd') ;

2

3 0 rows deleted.

4

5 SCOTT@orcl> alater table ware_retail_part drop partition par_04;

4:删除 具有完整性约束的分区

71c4d4413bbeffbe38e71e3e614c24cf.png

2a1b70840f729b34b481434c8d53e50c.png

04ee034f3a656fb5b3ef8d7de10655cc.png

4:  并入分区d1101ffc9bff2e3b9dbfb6f3c14d1937.png

c8fcf71521d8186a9a2c8c539614b8c0.png

1 SCOTT@orcl> conn sys/oracle as sysdba;

2 Connected.

3 SYS@orcl> select tablespace_name from dba_data_files;

4

5 TABLESPACE_NAME

6 ------------------------------

7 USERS

8 UNDOTBS1

9 SYSAUX

10 SYSTEM

11 EXAMPLE

12 TBS_TEST1

13 TBS_TEST_3

14 TBS_TEST4

15 TBS_TEST5

16 TBS_BIG_1

17

18 10 rows selected.

19

20 SYS@orcl> conn scott/scott;

21 Connected.

22 SCOTT@orcl> select table_name from user_tables;

23

24 TABLE_NAME

25 ------------------------------

26 DEPT

27 EMP

28 BONUS

29 SALGRADE

30 DEPT_LOG

31 GOODS

32 DDL_OPER_LOG

33 TB_TEST

34 STUDENTS

35 STUDENTS_DEMO

36 STUDENTS_DEMO1

37

38 TABLE_NAME

39 ------------------------------

40 STUDENTS_3

41 STUDENTS_4

42 BOOKS

43 BOOKS_1

44 MEMBERS

45 WARE_RETAIL_PART

46 WARE_RETAIL_PART3

47 PERSON

48 GOODS_1

49 PERSON2

50 SALERECORD

51

52 TABLE_NAME

53 ------------------------------

54 STUDENTS_7

55 STUDENTS_5

56

57 24 rows selected.

58

59 SCOTT@orcl> --创建表和分区

60 SCOTT@orcl> create table sales--创建一个销售记录表

61 2 (

62 3 id number primary key,--记录编号

63 4 goodsname varchar2(10),--商品名

64 5 saledate date--销售日期

65 6 )

66 7 partition by range(saledate)--按照日期分区

67 8 (

68 9 --第一季度数据

69 10 partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBS_TEST1 ,

70 11 --第二季度数据

71 12 partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBS_TEST_3 ,

72 13 --第三季度数据

73 14 partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBS_TEST1 ,

74 15 --第四季度数据

75 16 partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TBS_TEST_3

76 17 );

77

78

79 Table created.

80

81 SCOTT@orcl> SCOTT@orcl>

3ffb249ee333a2ae736cfd9d6660f48f.png

1

2 SCOTT@orcl> SCOTT@orcl> create index index_3_4 on sales(saledate)

3 2 local(

4 3 partition part_seal tablespace TBS_TEST1,

5 4 partition part_sea2 tablespace TBS_TEST_3,

6 5 partition part_sea3 tablespace TBS_TEST1,

7 6 partition part_sea4 tablespace TBS_TEST_3

8 7 );

9

10 Index created.

11

12 SCOTT@orcl>

e64c4321075ae77eadc452d9c41c15d5.png

1

2 SCOTT@orcl> --并入分区

3 SCOTT@orcl> alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;

4

5

6 Table altered.

7

8 SCOTT@orcl> SCOTT@orcl>

e690527ea157e60a54a8a6febeac86be.png

1 SCOTT@orcl> SCOTT@orcl> --重建局部索引

2 SCOTT@orcl> alter table sales modify partition part_sea4 rebuild unusable local indexes;

3

4 Table altered.

5

6 SCOTT@orcl>

六:创建索引分区d632d0a5132873191047008568bee322.png

1:索引分区概述9bcd39a45929a1f9cc2fd582eaca213d.png

2:本地索引分区d6a12a2f478475451f1ea6d032741584.png

1:准备好需要的表空间

79056471187028cc763783649c748689.png

1 SYS@orcl> create tablespace ts_1 datafile '/u01/app/oracle/oradata/orcl/ts1.dbf' size 10m extent management local autoallocate ;

2

3 Tablespace created.

4

5 SYS@orcl> create tablespace ts_2 datafile '/u01/app/oracle/oradata/orcl/ts2.dbf' size 10m extent management local autoallocate ;

6

7 Tablespace created.

8

9 SYS@orcl> create tablespace ts_3 datafile '/u01/app/oracle/oradata/orcl/ts3.dbf' size 10m extent management local autoallocate ;

10

11 Tablespace created.

12

13 SYS@orcl>

2:创建一个储存学生成绩的分区表studentgrade,该表共有3个分区,分别位于表空间ts_1/ts_2/ts_3;

1

2 SYS@orcl> conn scott/scott

3 Connected.

4 SCOTT@orcl> create table studentgrade(

5 2 id number primary key,

6 3 name varchar2(10),

7 4 subject varchar2(10),

8 5 grade number

9 6 )

10 7 partition by range(grade)

11 8 (

12 9 partition par_nopass values less than (60) tablespace ts_1,

13 10 partition par_pass values less than(70) tablespace ts_2,

14 11 partition par_good values less than(maxvalue) tablespace ts_3

15 12 );

16

17 Table created.

18

19 SCOTT@orcl>

3:根据表分区创建本地索引分区,与表分区一样。索引分区也是3个分区(p1,p2,p3)

1 SCOTT@orcl> create index grade_index on studentgrade(grade) local

2 2 (

3 3 partition p1 tablespace ts_1,

4 4 partition p2 tablespace ts_2,

5 5 partition p3 tablespace ts_3

6 6 );

7

8 Index created.

9

4: 通过 dba_ind_partitions 视图来进行查看索引分区信息

1 SCOTT@orcl> conn sys/oracle as sysdba;

2 Connected.

3

4 SYS@orcl> desc dba_ind_partitions;

5 Name Null? Type

6 ----------------------------------------- -------- ----------------------------

7 INDEX_OWNER VARCHAR2(30)

8 INDEX_NAME VARCHAR2(30)

9 COMPOSITE VARCHAR2(3)

10 PARTITION_NAME VARCHAR2(30)

11 SUBPARTITION_COUNT NUMBER

12 HIGH_VALUE LONG

13 HIGH_VALUE_LENGTH NUMBER

14 PARTITION_POSITION NUMBER

15 STATUS VARCHAR2(8)

16 TABLESPACE_NAME VARCHAR2(30)

17 PCT_FREE NUMBER

18 INI_TRANS NUMBER

19 MAX_TRANS NUMBER

20 INITIAL_EXTENT NUMBER

21 NEXT_EXTENT NUMBER

22 MIN_EXTENT NUMBER

23 MAX_EXTENT NUMBER

24 MAX_SIZE NUMBER

25 PCT_INCREASE NUMBER

26 FREELISTS NUMBER

27 FREELIST_GROUPS NUMBER

28 LOGGING VARCHAR2(7)

29 COMPRESSION VARCHAR2(8)

30 BLEVEL NUMBER

31 LEAF_BLOCKS NUMBER

32 DISTINCT_KEYS NUMBER

33 AVG_LEAF_BLOCKS_PER_KEY NUMBER

34 AVG_DATA_BLOCKS_PER_KEY NUMBER

35 CLUSTERING_FACTOR NUMBER

36 NUM_ROWS NUMBER

37 SAMPLE_SIZE NUMBER

38 LAST_ANALYZED DATE

39 BUFFER_POOL VARCHAR2(7)

40 FLASH_CACHE VARCHAR2(7)

41 CELL_FLASH_CACHE VARCHAR2(7)

42 USER_STATS VARCHAR2(3)

43 PCT_DIRECT_ACCESS NUMBER

44 GLOBAL_STATS VARCHAR2(3)

45 DOMIDX_OPSTATUS VARCHAR2(6)

46 PARAMETERS VARCHAR2(1000)

47 INTERVAL VARCHAR2(3)

48 SEGMENT_CREATED VARCHAR2(3)

1

2 SYS@orcl> select index_owner,index_name ,partition_name,tablespace_name from dba_ind_partitions where INDEX_NAME='GRADE_INDEX';

3

4 INDEX_OWNER INDEX_NAME

5 ------------------------------ ------------------------------

6 PARTITION_NAME TABLESPACE_NAME

7 ------------------------------ ------------------------------

8 SCOTT GRADE_INDEX

9 P1 TS_1

10

11 SCOTT GRADE_INDEX

12 P2 TS_2

13

14 SCOTT GRADE_INDEX

15 P3 TS_3

16

17

18 SYS@orcl> INDEX_NAME

3: 全局索引分区eec1a4ef3de0f5ee252fef569e31ed20.png

8038bdedaf1534185d4da11c8e8ab675.png

1

2 SCOTT@orcl> create index index_saleprice on BOOKS(saleprice) global partition by range(saleprice) ( partition p1 values less than(30),partition p2 values less than(50),partition p3 values less than(maxvalue) );

3

4 Index created.

fef3cbf82e736364fe1e2b150476cb75.png

1 SCOTT@orcl> create index index_ISBN on books(ISBN) global partition by hash(ISBN);

2

3 Index created.

4

5 SCOTT@orcl>

七:管理索引分区b3af951043aceea995ad9cbd32e510f8.png

1:索引分区管理的操作列表c833416f376985ac8325e5b7728d158b.png

6a6cadfb69820b11183b4759a3cb36a8.png

2:索引分区管理的实际操作5ea1a95183282df409288d3fe742b9ef.png

1:删除索引分区

1

2 SCOTT@orcl> alter index index_saleprice drop partition p2;

3

4 Index altered.

3c2d2ce1f8021df43da5b10816b8595e.png

68dbd335b241c7dc88cf18cb8a47a52a.png

1 SCOTT@orcl> alter index index_saleprice drop partition p1;

2

3 Index altered.

4 SCOTT@orcl> alter index index_saleprice drop partition p1;

5

6 Index altered.

2:重命名索引分区

b9656a81e895e5a57f0b77f4109e2259.png

faf6b736ccf284f9f090b4d167c66791.png

1

2 SCOTT@orcl> alter index index_saleprice rename partition p3 to p_new;

3

4 Index altered.

5

6 SCOTT@orcl>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值