个人网站 如何做推广,wordpress建立网站实例,韩国 网站 域名,吴江网站优化#xff08;一#xff09;什么是分区 所谓分区#xff0c;就是将一张巨型表或巨型索引分成若干个独立的组成部分进行存储和管理#xff0c;每一个相对小的#xff0c;可独立管理的部分#xff0c;称为分区。 #xff08;二#xff09;分区的优势 提高数据可管理性。对表…一什么是分区 所谓分区就是将一张巨型表或巨型索引分成若干个独立的组成部分进行存储和管理每一个相对小的可独立管理的部分称为分区。 二分区的优势 提高数据可管理性。对表进行分区数据的加载、索引的创建与重建、数据的备份与恢复等操作都可以在分区表上进行而不必在表级别上进行提高了数据的可管理性 增强数据库的可用性。某个分区出现问题只影响该分区其它分区照常运作 改善查询性能。将对整个表的查询转化为对某个分区表的查询提高了查询速度 提高数据库操作的并行性。可对分区表进行并行操作 透明性。将一张表分区后对于用户而言是无感的即用户不会感知到有多个分区表的存在用户不需要对SQL语句做处理三什么时候需要分区 什么时候对表进行分区,我们可以从下面的条件进行考虑 表大于2G 对一个表并行进行DML操作 为了平衡硬盘I/O需将同一个表分区到不同的表空间必须对表进行分区 要将表的一部分设为只读状态另一部分设为读写状态需要对表进行分区 要将表一部分设为可用状态另一部分设为不可用状态需要队标进行分区 要将表中数据按照一定规则分散到不同的磁盘中去需要对表进行分区四分区方法 oracle数据库提供了3种分区方法范围分区Range Partitioning、列表分区List Partitioning和散列分区Hash Partitioning结合3种方法又可以进行复合分区。 1范围分区Range Partitioning 范围分区是根据分区列值的范围对表进行分区每条记录根据分区列值的范围分配到不同的分区表中。常用于按照日期分区的表。 2列表分区List Partitioning 如果分区列值的并不能划分范围非数值或日期类型但是分区列的值仅包含少数值可采用分区列将特定的值保存到分区中。例如要统计整个省的人口信息如果将全部信息放在一张表中那么表将会非常臃肿这时候我们可以考虑按照列表分区将人口信息按照市分配到多个分区表中。 3散列分区Hash Partitioning 基于分区列的哈希算法将数据均匀分不到指定的分区中一个记录分配到哪个分区中是由Hash函数决定的。 4复合分区Composite Partitioning 复合分区是结合两种基本分区方法先采用一种分区方法进行分区然后再采用另一种方法进行分区。 五创建分区表 1创建范围分区表 CREATE TABLE table_name (...)
PARTITION BY RANGE(column1 [,column2,...])
(PARTITION partition1 VALUES LESS THAN(literal | MAXVALUE)[TABLESPACE tablespace]PARTITION partition2 VALUES LESS THAN(literal | MAXVALUE)[TABLESPACE tablespace][PARTITION partition3 VALUES LESS THAN(iteral | MAXVALUE)[TABLESPACE tablespace]]
) 参数说明 PARTITION BY RANGE采用范围分区 column分区列可以是单列也可以是多列 PARTITION分区设置 VALUE LESS THAN分区上限 TABLESPACE分区表存储的表空间 例子1创建一个销售分区表按照季度进行分区 create table sale_by_range
(prod_id number, cust_id number,time_id date,channel_id char(1),promo_id number(6),quantity_sold number(3),amount_sold number
)
partition by range(time_id)
(partition sales_q1_2012 values less than(to_date(1-4-2012,dd-mm-yyyy)) tablespace TBS1,partition sales_q2_2012 values less than(to_date(1-7-2012,dd-mm-yyyy)) tablespace TBS2,partition sales_q3_2012 values less than(to_date(1-10-2012,dd-mm-yyyy)) tablespace TBS3,partition sales_q4_2012 values less than(to_date(1-1-2013,dd-mm-yyyy)) tablespace TBS4
) 结果如下 插入数据发现没有问题 insert into sale_by_range(prod_id,cust_id,time_id,quantity_sold)
values(2,12,to_date(2012-04-01,yyyy-mm-dd),103); 结果如下 PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD---------- ---------- --------- ---------- ---------- ------------- ----------- 2 12 01-4月-12 103 2创建列表分区表 通过使用带PARTITION BY LIST子句的CREATE TABLE来创建列表分区表 CREATE TABLE table_name(...)
PARTITION BY LIST(column)
(PARTITION partition1 VALUES([literal|NULL]|[DEFAULT])TABLESPACE tablespace_name,[,PARTITION partition2 VALUES([literal|NULL]|[DEFAULT]),TABLESPACE tablespace_name...]
); 参数说明 PARTITION BY LIST:采用列表分区 DEFAULT:如果列值不符合其它分区记录的要求保存在该分区表 例子2创建一个销售分区表按照地区进行分区 --创建一个销售分区表按照地区进行分区
create table sales_by_list
(dept number,deptname varchar(20),quarterly_sales number(10,2),province varchar(20)
)
partition by list(province)
(partition southeast values(guangdong,fujian) tablespace TBS1, --广东、福建的存放在southeast分区表partition northeast values(heilongjiang,liaoning,jilin) tablespace TBS2, --黑龙江、辽宁、吉林放在northeast分区表partition southwest values(sichuan,yunnan,guizhou) tablespace TBS3, --四川、云南、贵州放在southwest分区表partition otherprovince values(default) tablespace TBS4 --其他省的放在otherprivince分区表
) 插入数据 --插入数据
insert into sales_by_list(dept,deptname,quarterly_sales,province) values(1,fa,2000,sichuan);
insert into sales_by_list(dept,deptname,quarterly_sales,province) values(2,cim,4000,guangdong);
insert into sales_by_list(dept,quarterly_sales,province) values(3,6000,liaoning);
insert into sales_by_list(dept,deptname,quarterly_sales,province) values(4,cell,8000,hunan);
insert into sales_by_list(dept,deptname) values(5,model)查看数据 SQL select * from sales_by_list;DEPT DEPTNAME QUARTERLY_SALES PROVINCE
---------- -------------------- --------------- --------------------2 cim 4000 guangdong3 6000 liaoning1 fa 2000 sichuan4 cell 8000 hunan5 model 3创建散列分区表 通过创建PARTITION BY HASH子句的CREATE TABLE语句创建散列分区表 CREATE TABLE table_name(...)
PARTITION BY HASH(column1[,column2,...])
[([PARTITION partition [TABLESPACE tablespace] [,...])] --设置分区表名称及对应表空间
|
[PARTITION hash_parttition_quantity STORE IN([tablespace1[,...])] --设置分区数量及存储表空间
]说明 HASH分区有2种方式来决定分区的数量一种是通过设置分区表的名称来决定分区的数量一种是直接设置分区的数量。 例子3通过直接设置分区的数量来创建HASH分区表 --创建一个HASH分区表
create table dept_by_hash
(dept number,deptname varchar(20),quarterly_sales number(20),province varchar(20)
)
partition by hash(dept)
partitions 4 store in(TBS1,TBS2,TBS3,TBS4); --需要注意的是创建分区时不需要小括号 数据的插入与上面2种方法一样这里不做讨论。 4创建复合分区表 Oracle 11g支持的6种复合分区方法 Range-RangeRange-ListRange-HashList-RangeList-ListList-Hash为什么不以Hash开头通过Hash分区的方式可知Hash分区是将数据均匀的分配到其分区表中它不关心数据内容所以先以Hash分然后再用其它方式显然没有意义。 创建符合分区时首先在CREATE TABLE语句中使用PARTITION BY [RANGE|LIST]子句确定分区方法、分区列然后再使用SUBPARTITION BY [RANGE|LIST|HASH]子句指定分区的分区方法、分区列、分区数量等信息。 例子4.创建一个分区列表将2012年的销售记录先按季度进行范围分区再按区域进行列表分区 --创建一个分区列表将2012年的销售记录先按季度进行范围分区再按区域进行列表分区
create table sales_by_range_list
(dept number,deptname varchar(20),time_id date,quarterly_sales number(10,2),province varchar(20)
)
partition by range(time_id)
subpartition by list(province)
(partition sales_q1_2012 values less than(to_date(1-4-2012,dd-mm-yyyy)) tablespace TBS1 --第一季度销售情况(SUBPARTITION sales_q1_2012_southeast VALUES (guangdong, fujian), --广东、福建的存放在southeast分区表SUBPARTITION sales_q1_2012_northeast VALUES (heilongjiang, liaoning, jilin), --黑龙江、辽宁、吉林放在northeast分区表SUBPARTITION sales_q1_2012_southwest VALUES (sichuan, yunnan, guizhou), --四川、云南、贵州放在southwest分区表SUBPARTITION sales_q1_2012_otherprovince VALUES ( DEFAULT ) --其他省的放在otherprivince分区表),partition sales_q2_2012 values less than(to_date(1-7-2012,dd-mm-yyyy)) --第二季度销售情况(subpartition sales_q2_2012_southeast values(guangdong,fujian),subpartition sales_q2_2012_northeast values(heilongjiang,liaoning,jilin),subpartition sales_q2_2012_southwest values(sichuan,yunnan,guizhou),subpartition sales_q2_2012_otherprovince values(default)),partition sales_q3_2012 values less than(to_date(1-10-2012,dd-mm-yyyy)) --第三季度销售情况(subpartition sales_q3_2012_southeast values(guangdong,fujian),subpartition sales_q3_2012_northeast values(heilongjiang,liaoning,jilin),subpartition sales_q3_2012_southwest values(sichuan,yunnan,guizhou),subpartition sales_q3_2012_otherprovince values(default)),partition sales_q4_2012 values less than(MAXVALUE) --第四季度销售情况(subpartition sales_q4_2012_southeast values(guangdong,fujian),subpartition sales_q4_2012_northeast values(heilongjiang,liaoning,jilin),subpartition sales_q4_2012_southwest values(sichuan,yunnan,guizhou),subpartition sales_q4_2012_otherprovince values(default))
) 向表中插入数据 --向表中插入数据
insert into sales_by_range_list values(1,a1,to_date(2012-1-2,yyyy-mm-dd),1000,guangdong); --模拟一季度四个地区的数据
insert into sales_by_range_list values(2,a1,to_date(2012-2-6,yyyy-mm-dd),1000,heilongjiang);
insert into sales_by_range_list values(3,a1,to_date(2012-2-28,yyyy-mm-dd),1000,guizhou);
insert into sales_by_range_list values(4,a1,to_date(2012-3-4,yyyy-mm-dd),1000,gansu);
insert into sales_by_range_list values(5,a1,to_date(2012-4-6,yyyy-mm-dd),1000,fujian); --模拟二季度四个地区的数据
insert into sales_by_range_list values(6,a1,to_date(2012-5-6,yyyy-mm-dd),1000,jilin);
insert into sales_by_range_list values(7,a1,to_date(2012-5-28,yyyy-mm-dd),1000,yunnan);
insert into sales_by_range_list values(8,a1,to_date(2012-6-6,yyyy-mm-dd),1000,xizang);
insert into sales_by_range_list values(9,a1,to_date(2012-7-6,yyyy-mm-dd),1000,guangdong); --模拟三季度四个地区的数据
insert into sales_by_range_list values(10,a1,to_date(2012-8-6,yyyy-mm-dd),1000,heilongjiang);
insert into sales_by_range_list values(11,a1,to_date(2012-9-6,yyyy-mm-dd),1000,guizhou);
insert into sales_by_range_list values(12,a1,to_date(2012-9-25,yyyy-mm-dd),1000,gansu);
insert into sales_by_range_list values(13,a1,to_date(2012-10-6,yyyy-mm-dd),1000,fujian); --模拟四季度四个地区的数据
insert into sales_by_range_list values(14,a1,to_date(2012-11-6,yyyy-mm-dd),1000,jilin);
insert into sales_by_range_list values(15,a1,to_date(2012-12-6,yyyy-mm-dd),1000,yunnan);
insert into sales_by_range_list values(16,a1,to_date(2012-12-26,yyyy-mm-dd),1000,xizang); 可以看到结果 (六)查看分区表 1查看分区表信息 可以通过DBA_PART_TABLES、ALL_PART_TABLES、USER_PART_TABLES来查看分区表信息具体用法如下 DBA_PART_TABLES查看数据库里面的全部分区表信息需要具有DBA权限否则会报“ora-00942: 表或视图不存在”错误ALL_PART_TABLES查看当前用户可见的全部分区表信息USER_PART_TABLES查看当前用户拥有的全部分区表信息例子5查看当前用户拥有的的全部分区表信息 select * from user_part_tables; 重要参数说明 TABLE_NAME:分区表名称 PARTITION_TYPE:分区类型 SUBPARTITION_TYPE:子分区类型 PARTITION_COUNT:分区数量 SUBPARTITION_KEY_COUNT子分区用于分区的列的数量。 通过上面的查询我们可以得到分区表名称、分区数量、子分区数量等信息但是并没有得到分区/子分区的名称以及分区/子分区是如何定义等信息接下来可以使用USER_TAB_PARTITION和USER_TAB_SUBPARTITION查看分区表/子分区表信息 --查询分区表信息
SELECT * FROM USER_TAB_PARTITIONS; --查询子分区表信息
SELECT * FROM USER_TAB_SUBPARTITIONS; 2查看分区表数据 在向分区表插入数据时我们最关心的就是数据是否按照我们的规划进入了各个分区表这时就需要我们查看分区表的数据那么怎么查看分区表的数据通过sql语句 SELECT * FROM table_name PARTITION(partition_table_name) 例子6.查看SALES_BY_LIST_RANGE分区表第一季度的信息 select * from SALES_BY_RANGE_LIST partition(sales_q1_2012); 得到结果 七维护分区表 1添加分区 ALTER TABLE table_name ADD PARTITION ... --添加分区ALTER TABLE table_name MODIFY PARTITION partition ADD SUBPARTITION ... --为分区添加子分区 2删除分区 ALTER TABLE table_name DROP PARTITION partition; --删除分区ALTER TABLE table_name DROP SUBPARTITION subpartition; --删除子分区 3其他 此外还有联合分区、交换分区、合并分区等操作不一一介绍。 八与分区相关的数据字典 数据字典说明xxx_PART_TABLES包含分区表的分区信息xxx_TAB_PARTITIONS包含分区层次、分区存储、分区统计等信息xxx_TAB_SUBPARTITIONS包含子分区层次、分区存储、分区统计等信息xxx_PART_KEY_COLUMNS包含分区表的分区列信息xxx_SUBPART_KEY_COLUMNS包含子分区表的分区列信息xxx_COL_STATISTICS包含分区表的分区列的统计信息和柱状图信息……xxx代表DBA、ALL、USER 对分区表有了一定的了解接下来学习分区索引。转载于:https://www.cnblogs.com/lijiaman/p/6495465.html