Oracle表分区
来源:互联网 发布:淘宝的一元秒杀在哪里 编辑:程序博客网 时间:2024/06/06 18:59
Oracle表分区:
1.你首先得有一个大数据量的表,数据了越大效果就越明显;
2.创建一个分区表,结构与源数据表一样,按时间范围分区,最后每个月系统自动分一次区;
sql如下:
CREATE TABLE SUN_CORE_EVENT_LOG_TMP
(
EID varchar(32),
OPENID varchar(50),
CREATETIME date,
MSGTYPE varchar(30),
EVENT varchar(30),
EVENTKEY varchar(500),
TICKET varchar(200),
LATITUDE varchar(32),
LONGITUDE varchar(32),
PRECISION varchar(32),
WEIXINID varchar(10)
)
PARTITION BY RANGE (createtime)
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(PARTITION P1 VALUES LESS THAN (TO_DATE('2015-1-18', 'YYYY-MM-DD')));
3.将源表数据导入到分区表.
INSERT INTO SUN_CORE_EVENT_LOG_TMP SELECT * FROM SUN_CORE_EVENT_LOG ;
4.在分区表中建立一个本地索引.
create index eid_ix on SUN_CORE_EVENT_LOG_TMP(eid) local ;-- 为范围分区创建本地索引
本地分区索引是使用与分区表相同的分区列,相同的分区方法进行分区的索引,本地分区索引的一个分区对应表的一个分区,因此,一个分区表有几个分区或子分区,其本地分区索引就有多少个分区.
5.为方式损坏原表数据,我再创建一个相同的表(但没有分区)
create table Sun_Core_Event_Log_bak as select * from Sun_Core_Event_Log_Tmp;
6.在两张表上执行相同的sql查看执行计划;
sql:
有分区:
select * from Sun_Core_Event_Log_Tmp t where t.createtime >TO_DATE('2015-10-10', 'YYYY-MM-DD') and t.createtime>TO_DATE('2015-12-10','YYYY-MM-DD');
没有分区:
select * from Sun_Core_Event_Log_bak t where t.createtime >TO_DATE('2015-10-10', 'YYYY-MM-DD') and t.createtime>TO_DATE('2015-12-10','YYYY-MM-DD');
执行计划截图:
很显然建立了分区的表速度杠杠的;
此截图是分区表的分区信息
指定分区名查询:
select count(*) from SUN_LOG_ACCESS partition(sys_p22);
- Oracle表分区、索引分区
- Oracle表分区:范围分区
- Oracle.表分区:列表分区
- Oracle.表分区:复合分区
- ORACLE表分区
- oracle大表分区
- ORACLE表分区
- Oracle表分区
- Oracle表分区
- oracle(表分区技术)
- oracle 表空间/分区
- Oracle 创建表分区
- oracle 表分区
- oracle表分区
- Oracle表分区
- Oracle表分区
- oracle 物理表 分区
- oracle表分区详解
- DDR工作原理
- Linux screen命令简单使用方法
- 纯css画一颗跳动的心
- iOS遍历相册中的图片
- ulimit -a
- Oracle表分区
- 37. Sudoku Solver
- C/C++中的联合 union
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- 上传AppStore时图像不能包含 alpha通道和透明度
- zabbix监控mysql数据库参数
- nginx 访问日至 错误日志配置
- iOS NSDate与NSString相互转化
- IOS-OC App本地数据库