Oracle表分区的基本使用

什么是表空间

是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称为表空间

什么是表分区

表分区就是把一张大数据的表,根据分区策略进行分区,分区设置完成之后,由数据库自身的储存引擎来实现分发数据到指定的分区中。

分区不是分表,不会生成新的数据表,只是将表的数据分摊到不同的硬盘,系统或是不同服务器存储介质中,实际上还是一张表。

表分区具体作用

分区功能可以将表、索引或者索引组织表进一步细分为段,这些数据对象的段叫分区,每个分区独有自己的名称,一个分区后的对象(表)具体有多个段,这些段既可以集体管理,也可以单独管理

表分区使用场景

  • 表的大小超过2GB
  • 表中有大量的临时数据,数据存在明显的时间顺序
  • 表的存储必须分散在不同的储存设备

表分区的优缺点

优点

  • 改善查询性能:对分区对象的查询可以搜索仅自己关心的分区,提高检索速度
  • 增强可用性:如果表的某个分区出现故障,表在其他分区的数据依然可用
  • 维护方便:如果某个分区出现故障,需要修复数据,只修复该分区即可
  • 均衡i/o:可以把不同的分区映射到磁盘以平衡i/o,改善整个系统的性能

缺点

  • 已经存在的表没有方法可以直接转化为分区表
  • 需要维护

表分区类型

  • 范围分区:range
  • 列表分区:list
  • 组合分区:范围+列表;范围+散列;列表+散列

范围分区

create table_name(column1 type1,column2 type2,...)
partition by range (需要用作分区的字段名)
(partition 分区名1 values less than (分区字段具体的一个上限值),partition 分区名2 values less than (分区字段具体的一个上限值),partition 分区名3 values less than (maxvalues)
);

创建分区

普通创建
create emp_range(empno number,ename varchar2(10),job varchar2(10),mgr number,hiredate date,sal number,comm number,deptno number)
partition by range(hiredate)
(partition range_1981 values less than (to_date('19810101','YYYYMMDD')),partition range_1982 values less than (to_date('19820101','YYYYMMDD')),partition range_max values less than (maxvalue)--不在上面两个范围内的会划分到此处
);as的方法创建
create table emp_range3
partition by range(hiredate)
(partition range_1981 values less than (to_date('19810101','YYYYMMDD')),partition range_1982 values less than (to_date('19820101','YYYYMMDD')),partition range_max values less than (maxvalue)
)
as select * from emp;

实例

--创建一张emp_range表数据同emp一样-- 并按照工资范围 划分为三个档 --第一个档 工资不高于2000  第二个档 不高于4000 第三个档 不高于8000drop table emp_range;create table emp_range partition by range (sal)(partition s_2000 values less than (2000),partition s_4000 values less than (4000),partition s_8000 values less than (8000))as select * from emp;select * from emp_range;select * from emp_range partition (s_2000);--step2:数据插入分区表中insert into emp_range(sal) values(2000);--step3:查询分区select * from emp_range partition (s_4000);insert into emp_range(sal) values(10000);  --没定义 不能插入当分区字段作为查询条件的时候,如果查询范围没有跨越分区,就会在对应分区查询,否则就会全表扫描partition range single   单个分区扫描
select * from emp_range where sal between 1000 and 1500; 
PARTITION RANGE ITERATOR 分区迭代扫描
select * from emp_range where sal between 1000 and 3000; 
PARTITION RANGE ALL      是分区全扫描
select * from emp_range where sal between 1000 and 5500; --创建emp_date和emp表数据一致  并按照入职年份进行分区划分 1981年和1982年和其他年份的分区
create table emp_date 
partition by range(hiredate)
(partition p_1981 values less than (date'1982-1-1'),partition p_1982 values less than (date'1983-1-1'),partition p_max  values less than (maxvalue)
)
as select * from emp;

列表分区

create table table_name(column1 type1,column2 type2,...)
partition by list (需要用作分区的字段名)
(partition 分区名1 values (具体的值),
partition 分区名2 values (具体的值),
partition 分区名3 values (default)
);--创建
create table emp_list2
partition by list(deptno)
(partition list_10 values (10,20),
partition list_o values (default)   --没定义的其他值都归为默认值的分区
)
as select * from emp; select * from emp_list2 partition (list_10);
select * from emp_list2 partition (list_o);insert into emp_list2(deptno) values (40);      select distinct job from emp      
--创建一个emp_job 按照职位类型创建5个分区    
create table emp_job 
partition by list (job)
(partition p_clerk values ('CLERK'),
partition p_SALESMAN values ('SALESMAN'),
partition p_PRESIDENT values ('PRESIDENT'),partition p_MANAGER values ('MANAGER'),
partition p_ANALYST values ('ANALYST')      )
as select * from emp;select * from emp_job partition (p_clerk);

哈希分区

create table emp_hash(deptno   number(10),ename varchar2(30)
) partition by hash(empno)(partition p1 tablespace tetstbs1,partition p2 tablespace tetstbs2,partition p3 tablespace tetstbs3,partition p4 tablespace tetstbs4,
);
--简写
create table emp_hash_test2(deptno  number(10),ename varchar2(30)
) partition by hash(deptno) partitions 4 store in (tetstbs1, tetstbs2, tetstbs3, tetstbs4);

实例

create table hash_part2(empno number,ename varchar2(34)
)
partition by hash(empno)(partition p1 tablespace users,partition p2 tablespace users,partition p3 tablespace users,partition p4 tablespace users
);create table hash_part(empno number,ename varchar2(34)
)
partition by hash(empno)
partitions 3;--查看具体的分区信息:
SELECT partition_name, high_value,tablespace_name
FROM user_tab_partitions
WHERE table_name = 'HASH_PART'
ORDER BY partition_position;

组合分区

 	  组合分区(范围分区+列表分区)语法格式:create table table_name(column1 type1,column2 type2,...)partition by range (主分区字段)subpartition by list (子分区字段)(----partition 主分区名1 values less than (主分区1上限)----(subpartition 子分区名1 values (子分区值1),subpartition 子分区名2 values (子分区值2)) ,-------------------partition 主分区名2 values less than (主分区2上限)---(subpartition 子分区名1 values (子分区值1),subpartition 子分区名2 values (子分区值2)));主分区为range子分区为list:
--对hiredate 进行范围分区 1981 和之后的时间
--再进行 部门编号的列表分区
create table emp_hiredate_deptno
partition by range (hiredate)
subpartition by list(deptno) 
(
partition p_1981 values less than (date'1982-1-1')
(
subpartition p_1981_10  values (10),
subpartition p_1981_20  values (20),
subpartition p_1981_30  values (30)
),
partition p_1982 values less than (maxvalue)
(
subpartition p_1982_10  values (10),
subpartition p_1982_20  values (20),
subpartition p_1982_30  values (30)
)
) 
as select * from emp;查询主分区与子分区   
select * from emp_hiredate_deptno;    
select * from emp_hiredate_deptno partition (p_1981);      
select * from emp_hiredate_deptno subpartition (p_1981_10);      主分区为list子分区为list:
create table emp_range_list3
partition by list(deptno)
subpartition by list(deptno)
(partition p1 values (10,20)
(subpartition p1a values (10),
subpartition p1b values (20)),
partition p2 values (30)
(subpartition p2c values (30))
)as select * from emp;--创建一张表  emp_job  表数据同emp  并按照部门和职位进行分区 drop table emp_job;
select distinct  deptno,job  from  emp;
create table emp_job
partition by list (deptno)
subpartition by list(job)
(
partition p1 values (10)
(subpartition p1a values ('PRESIDENT'),subpartition p1b values ('CLERK'),subpartition p1c values ('MANAGER')
),
partition p2 values (20)
(subpartition p2a values ('CLERK'),subpartition p2b values ('MANAGER'),subpartition p2c values ('ANALYST')
),
partition p3 values (30)
(subpartition p3a values ('SALESMAN'),subpartition p3b values ('CLERK'),subpartition p3c values ('MANAGER')
)
)
as select * from emp;select * from emp_job subpartition(p1a);

分区管理

删除分区(删除分区会删除表数据)

      alter table 表名 drop partition 分区名;alter table emp_job drop partition p1;select * from emp_job partition(p1);alter table emp_job drop subpartition p2a;select * from emp_range_list3 subpartition(p1b);

添加分区(只能添加已存分区规则外的规则分区)

范围分区只能在最高值的后边追加,不可以在中间范围增加 maxvalue

alter table 表名 add partition 分区名 values less than(上限值);
--给emp_range 添加 第四个分区 范围是工资不超过10000
select * from emp_range;
alter table emp_range add partition p4 values less than(10000);alter table emp_date add partition range_1984 values less than(to_date('19850101','YYYYMMDD'));
alter table emp_job add partition p1 values (10);      

截断分区

alter table 表名 truncate partition 分区名;
alter table 表名 truncate subpartition 子分区名;
alter table emp_job truncate partition p1;
select * from emp_job subpartition (p3a);
alter table emp_job truncate subpartition p3a;

合并分区

不可以跨区合并,要合并必须是相邻且有序的

alter table 表名 merge partitions 分区名1,分区名2 into partition 新分区名;alter table emp_job merge partitions p2,p3 into partition p_new;--合并范围分区
emp_range
alter table emp_range merge partitions s_2000,s_4000 into partition s_4;

拆分分区

alter table 表名 split partition 分区名 at (分割值) into (partition 新分区名1,partition 新分区名2);
alter table emp_range split partition s_4
at (2000) into (partition s_2000,partition s_4000);alter table emp_job split partition p_new at (20)    --不可以进行分离列表分区into (partition p2,partition p3);alter table emp_date merge partitions p_1981,p_1982 into partition p_1983;
alter table emp_date split partition p_1983 at (date'1982-1-1')    into (partition p_1981,partition p_1982);

重命名分区

alter table 表名 rename partition 原分区名 to 新分区名;
alter table emp_range4 rename partition range_1982 to range_1982_2;
--查看分区信息
select * from user_tab_partitions a where a.table_name = 'EMP_JOB';

实例

select * from  emp_range ;
--拆分工资在4000-8000区间的分区为两个分区  以6000为分界线
alter table emp_range split partition s_8000 at (6000) into (partition s_6000,partition s_8000);
--合并 2000-4000 分区和4000到6000范围的分区 分区名命名为 posal
alter table emp_range merge partitions s_2000,s_4000 into partition posal;
--重命名posal为 p4_6
alter table emp_range rename partition posal to p4_6;
--删除 p4分区
alter table emp_range drop partition p4;
--添加8000-15000的范围分区 s_15000 
alter table emp_range add partition s_15000 values less than(15000);  
--清空p4_6分区的数据
alter table emp_range truncate partition p4_6;
select * from emp_range partition (p4_6);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis5学习笔记之三:事务、锁和集成

3. 事务,锁和集成 3.1 事务 3.1.1 基本应用 redis事务的本质:一组命令的集合,一个事务中的所有命令都会被序列化,在执行事务的过程中,会按照顺序执行 redis事务的特点: redis单条命令能够保证原子性&…

第五讲:独立键盘、矩阵键盘的检测原理及实现

IO口电平检测 检测IO口的电平时&#xff0c;需要先给高电平 之后便进入输出状态 #include <reg52.h>void main() {// 配置P1.0为输出模式&#xff0c;并输出高电平P1 0x01; // 将P1.0置为高电平// 读取P1.0的电平状态if (P1 & 0x01) {// 如果P1.0为高电平&#x…

构造函数和析构函数可不可以是虚函致?

构造函数不能是虚函数&#xff0c;虚函数必须把函数地址放在虚函数表中&#xff0c;虚函数表是靠虚函数指针来访问的&#xff0c;而虚函数指针是依靠对象的&#xff0c;构造函数实现的时候对象还不存在&#xff0c;并且如果构造函数是虚函数&#xff0c;在派生类里面调用基类的…

YOLOv9改进策略 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv9有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

(笔记)当界面需求较少时直接在DTO类中写逻辑,省去service层

需求&#xff1a;开发月度报表、总报表、折线图 像这种&#xff0c;就简单加三个查询&#xff0c;我个人认为可以直接省去service层代码&#xff0c;只使用controller层和mapper层即可。虽说三层架构的初衷也是为了解耦&#xff0c;但是这种只有查询的代码完全可以省去中间两个…

【iOS】Runtime

文章目录 前言一、Runtime简介二、NSObject库起源isaisa_t结构体cache_t的具体实现class_data_bits_t的具体实现 三、[self class] 与 [super class]四、消息发送与转发五、Runtime应用场景 前言 之前分part学习了Runtime的内容&#xff0c;但是没有系统的总结&#xff0c;这篇…

集成接口的方法

集成接口的方法 目录概述需求&#xff1a;集成接口的方法1. 使用API&#xff08;Application Programming Interface&#xff09;&#xff1a;2. 使用消息队列&#xff1a;3. 使用ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff1a;4. 使用Web服务&#xff…

网络工程师----第四十七天

1、请简述super vlan和sub vlan的区别&#xff1f; 2、请简述mux vlan 中不同vlan的特点&#xff1f; 3、请基于工作原理简述GVRP协议中三种接口模式的特点&#xff1f; 4、请简述STP的选举过程&#xff1f; 5、两台交换机在不增加成本的情况下为提高链路带宽和可靠性采用链路聚…

【Linux】CPU当前频率及调整CPU频率操作

CPU的governor(调频)策略 governor(调频)策略&#xff0c;linux内核一共有5种调频策略&#xff1a; performance-最高性能&#xff0c;直接使用最高频率&#xff0c;不考虑耗电&#xff1b; interactive-一开始直接使用最高频率&#xff0c;然后根据CPU负载慢慢降低&#xf…

【TB作品】MSP430F5529单片机,火灾报警器,DS18B20温度显示,温控风扇

功能 这段代码是一个基于msp430微控制器的嵌入式系统程序&#xff0c;主要实现了以下功能&#xff1a; 初始化和配置&#xff1a; 初始化了OLED显示屏、DS18B20温度传感器、火焰传感器、风扇&#xff08;通过PWM控制&#xff09;和蜂鸣器。设置了CPU时钟源和分频&#xff0c;以…

网络原理——HTTP/HTTPS ---- HTTPS

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 HTTPS加密与解密HTTPS的工作流程使用对称密钥来加密使用非对称密钥 来对 对称密钥进行加密第三方公证总结 HTTPS https本质上就是在http的基础之上 增加了加密层,抛开加密层之后,剩下的部…

号称超级增程电动,领克07EM-P带来技术变革?

近年来&#xff0c;自主品牌在新能源汽车领域百花齐放&#xff0c;尤其是在混合动力市场上&#xff0c;比亚迪的DM-i技术引领了风潮&#xff0c;秦L的一经亮相&#xff0c;整个车圈都沸腾了&#xff0c;“超级混动”的概念深入人心。 各大自主品牌都有了自己的混动平台和技术。…

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后&#xff0c;就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码&#xff0c;这可以使用import语句实现。im…

步进电机双闭环细分控制(matlab仿真)内含课设等参考文件

1.1 步进电机工作原理 步进电机是一种用电脉冲进行控制&#xff0c;将电脉冲信号转换成相位移的电机&#xff0c;其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度。脉冲的数量决定了旋转的总角度&#xff0c;脉…

System-Verilog

实验报告&#xff1a;使用SystemVerilog在DE2-115开发板上重新设计Verilog练习项目 实验目的 通过学习和掌握SystemVerilog的基本语法&#xff0c;重新设计之前在Verilog中实现的练习项目&#xff0c;如流水灯、全加器、VGA显示和超声波测距&#xff0c;并完成相应的testbenc…

(ICLR,2024)HarMA:高效的协同迁移学习与模态对齐遥感技术

文章目录 相关资料摘要引言方法多模态门控适配器目标函数 实验 相关资料 论文&#xff1a;Efficient Remote Sensing with Harmonized Transfer Learning and Modality Alignment 代码&#xff1a;https://github.com/seekerhuang/HarMA 摘要 随着视觉和语言预训练&#xf…

seRsync + Rsync 实时同步

文章目录 1&#xff0c;结构图2&#xff0c;节点A2.1 安装rsync2.2 安装seRsync2.3&#xff0c; 创建seRsync的守护进程用systemd管理并启动2.4&#xff0c;上传rsync.pass密码文件到配置文件目录&#xff1a;/etc/2.5 &#xff0c;重新加载systemd&#xff0c;启动sersyncd守护…

gdb调试常见指令

quit&#xff1a;退出gdb list/l&#xff1a;l 文件名&#xff1a;行号/函数名&#xff0c;l 行号/函数名 b:b 文件名&#xff1a;行号/函数名&#xff0c;b 行号/函数名 info/i: info b d:d 断电编号 disable/enable 断电编号&#xff1a;使能&#xff08;关闭&#xff0…

React路由学习

官方文档&#xff1a;https://reactrouter.com/en/main 学习时以Tutorial&#xff08;教程&#xff09;为主 一、创建项目 //创建项目 npm create vitelatest [项目名] -- --template react//安装react-router cd [项目名] npm i react-router-dom localforage match-sorter…

AI电销机器人和传统人工销售相比到底厉害在哪里?

传统的电销模式存在成本高、管理难、招人难、转化低的问题。近几年&#xff0c;随着人工智能技术的兴起&#xff0c;电销行业也加入了人工智能的赛道。电话机器人是自动执行工作的机器装置。它既可以接受人类指挥&#xff0c;又可以运行预先编排的程序&#xff0c;也可以根据以…