之前优化用过几次表分区,总结下,免得以后忘记掉:
1:哪个分区有用,哪个分区没用?
---表指明的表空间,分区未指明表空间,子分区指明表空间但是和表指明的表空间不一致,如下:
CREATE TABLE partition_test_bak
(
post_date VARCHAR2(8 CHAR) NOT NULL,
multi_seq NUMBER
)
TABLESPACE data_user
PARTITION BY RANGE(post_date) SUBPARTITION BY HASH(multi_seq)
(PARTITION partition_ranges_1 VALUES LESS THAN ('20100101')
(SUBPARTITION partition_ranges_1_sub1 TABLESPACE in_indx,
SUBPARTITION partition_ranges_1_sub2 TABLESPACE in_indx));
---上面的向表里面插入100w条记录发现data_user表空间未有任何变化,而in_indx表空间增加,说明实际上是以子分区指明的空间来存放数据
---下面的表指明的表空间和子分区指明的表空间一致
CREATE TABLE partition_test_bak
(
post_date VARCHAR2(8 CHAR) NOT NULL,
multi_seq NUMBER
)
TABLESPACE in_indx
PARTITION BY RANGE(post_date) SUBPARTITION BY HASH(multi_seq)
(PARTITION partition_ranges_1 VALUES LESS THAN ('20100101')
(SUBPARTITION partition_ranges_1_sub1 TABLESPACE in_indx,
SUBPARTITION partition_ranges_1_sub2 TABLESPACE in_indx));
----表的表空间和分区表空间一致,但和子分区的表空间不一致,试验证明是数据存放在子分区的表空间
CREATE TABLE partition_test_bak1
(
post_date VARCHAR2(8 CHAR) NOT NULL,
multi_seq NUMBER
)
TABLESPACE data_user
PARTITION BY RANGE(post_date) SUBPARTITION BY HASH(multi_seq)
(PARTITION partition_ranges_1 VALUES LESS THAN ('20100101') tablespace data_user
(SUBPARTITION partition_ranges_1_sub1 TABLESPACE in_indx,
SUBPARTITION partition_ranges_1_sub2 TABLESPACE in_indx));
2 查询表分区或者子分区的数据
select * from partition_test_bak1 partition(partition_ranges_1);
即使data_user表空间没有存放插入的数据,也应该能查出来数据,试验证明是可以查出来.
select * from partition_test_bak1 subpartition( partition_ranges_1_sub1);
3何时使用表空间分区:
对于数据量大的,不经常更新,更新数据的比例原小于总数据量的表,然后根据业务分析进行表分区.如果该表有大批量的插入操作,最好采用混合分区.尤其在RAC环境下,简单的分区只能解决部分问题,大并发的操作可能会引起RAC节点间的数据块正用.这是要么对表按照RAC的节点进行范围子分区(10g环境),或者调整应用,指定一个节点运行数据(在系统能够承受的压力范围内).
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22861158/viewspace-676694/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22861158/viewspace-676694/