扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
一.表分区策略
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了都江堰免费建站欢迎大家使用!
1.识别大表
采用ANALYZE TABLE语句进行分析,然后查询数据字典获得相应的数据量。
2.大表如何分区
可根据月份,季度以及年份等进行分区;
3.分区的表空间规划
要对每个表空间的大小进行估计
二.创建表分区
a.创建范围分区的关键字是'RANGE'
1.范围分区
create table ware_retail_part --创建一个描述商品零售的数据表
(
id integer primary key,--销售编号
retail_date date,--销售日期
ware_name varchar2(50)--商品名称
)
partition by range(retail_date)
(
--2011年第一个季度为part_01分区
partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TEMP01,
--2011年第二个季度为part_02分区
partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TEMP01,
--2011年第三个季度为part_03分区
partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TEMP01,
--2011年第四个季度为part_04分区
partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TEMP01
);
2.创建散列分区
3.组合分区:
4.interval 分区
三.创建索引分区
索引分区分为本地索引分区和全局索引分区,全局索引不反应基础表的结构,要分区只能进行范围分区。
创建索引分区要参照表分区
四.分区技术简介
优点:
1.减少维护工作量
2.增强数据的可用性
3.均衡I/O,提升性能
4.提高查询速度
5.分区对用户保持透明,用户感觉不到分区的存在。
五,管理表分区
1.添加表分区
ALTER TABLE...ALTER PARATITION
2.合并表分区
3.删除分区
ALTER TABLE...DROP PARTITION
删除分区时,里面的数据也会被删除。
-创建表和分区
create table sales--创建一个销售记录表
(
id number primary key,--记录编号
goodsname varchar2(10),--商品名
saledate date--销售日期
)
partition by range(saledate)--按照日期分区
(
--第一季度数据
partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace tbsp_1,
--第二季度数据
partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace tbsp_2,
--第三季度数据
partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace tbsp_1,
--第四季度数据
partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace tbsp_2
);
--创建局部索引
create index index_3_4 on sales(saledate)
local(
partition part_seal tablespace tbsp_1,
partition part_sea2 tablespace tbsp_2,
partition part_sea3 tablespace tbsp_1,
partition part_sea4 tablespace tbsp_2
);
--并入分区
alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;
--重建局部索引
alter table sales modify partition part_sea4 rebuild unusable local indexes;
六.管理索引分区
删除索引:DROP PARTITION
重建分区:REBUILT PARTITION
更名索引分区:RENAME PARTITION
分割索引分区:SPLIT PARTITION
Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。
1、增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
2、减少关闭时间:如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,可能比整个大表修复花的时间更少;
3、维护轻松:如果需要建表,独自管理每个公区比管理单个大表要轻松得多;
4、均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
5、改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快;
6、分区对用户透明:最终用户感觉不到分区的存在。
list分区也需要指定列的值,其分区值必须明确指定,该分区列只能有一个,不能像range或者hash分区那样同时指定多个列做为分区依赖列,但它的单个分区对应值可以是多个。
在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存储那些不在指定范围内的记录,类似range分区中的maxvalue分区。
在根据某字段,如城市代码分区时,可以指定default,把非分区规则的数据,全部放到这个default分区。
如:
create
table
custaddr
(
id
varchar2(15
byte)
not
null,
areacode
varchar2(4
byte)
)
partition
by
list
(areacode)
(
partition
t_list025
values
('025'),
partition
t_list372
values
('372')
,
partition
t_list510
values
('510'),
partition
p_other
values
(default)
)
1、创建语句
create table p(id number)
partition by range(id)
(partition p1 values less than(100) tablespace t1,
partition p2 values less than(200) tablespace t2,
partition p3 values less than(300) tablespace t3);
2、添加分区
alter table p add partition p4 values less than (400) tablespace t4;
3、清除分区数据
alter table p trunc partition p1;
4、删除分区
alter table p drop partition p1;
在Oracle10g中,没有定义间隔分区,只能通过范围分区实现间隔分区功能,如果要实现自动创建分区,只能通过创建JOB或者scheduler来实现;而在11g中,Oracle直接提供了间隔分区功能,大大简化了间隔分区的实现。
----注:oracle11g虽然可以自动分区,但是分区的名字不能自定义,对于需要定时删除分区时没法处理,不如通过时间范围来手工分区。详见
create table HIP_LOG_NODE_Part
(
ID VARCHAR2(32) not null,
RECORD_TIME DATE
)tablespace TB_HIP_LOG_NODE
PARTITION BY RANGE (RECORD_TIME) interval (numtoyminterval(1, 'month'))
STORE IN (TB_HIP_LOG_NODE)
(
partition hip_log_node_partition values less than (to_date('2019-08-01 00:00','yyyy-MM-dd HH24:mi')) tablespace TB_HIP_LOG_NODE
);
1、Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区。
2、2019-08-01前的数据(包含8月份的数据)会放入hip_log_node_partition 分区,8月1日后的数据每月只要有数据,就会自动创建一个分区。也就是从9月开始,开始新建分区。
3、interval函数--将数值按标准换算为日期
numtodsinterval、numtodsinterval函数,将数字转成年月,时分秒
详见:
4、查看表分区 select table_name,partition_name from user_tab_partitions where table_name='INTERVAL_SALES';
5、插入数据再次查看分区,详见:
6、修改分区、合并分区、拆分分区,详见 :
7、创建索引(分区索引、全局索引) :
非分区字段创建主键,则创建主键local索引时必须加上分区字段
ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (主键字段,分区字段) USING INDEX LOCAL;
8、oracle 10g创建表分区
9、删除
1.不保留,直接删除:
alter table table_name drop/truncate partition partition_name;
具体用drop还是truncate,得你自己衡量,drop的话原来的分区和数据直接就没有了,truncate的话,只是数据没有了,分区还在。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流