当前位置: 首页 > news >正文

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);

相关文章:

Oracle表分区的基本使用

什么是表空间 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称为表空间 什么是表分区 表分区就是把一张大数据的表,根据分区策略进行分区,分区设置完成之后,…...

6月5号作业

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数 ​ #include <iostream>using namespace std; class Slu { priv…...

中继器、集线器、网桥、交换机、路由器和网关

目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.1.1 认识网桥2.1.2 网桥的工作原理2.1.3 生成树网桥 2.2 交换机2.2.1 交换机的特征2.2.2 交换机的交换模式2.2.3 交换机的功能 三、路由器、网关3.1 路由器的介绍3.2 路由器的工作过程3.2.1 前置知…...

揭秘相似矩阵:机器学习算法中的隐形“纽带”

在机器学习领域&#xff0c;数据的处理和分析至关重要。如何有效地从复杂的数据集中提取有价值的信息&#xff0c;是每一个机器学习研究者都在努力探索的问题。相似矩阵&#xff0c;作为衡量数据之间相似性的数学工具&#xff0c;在机器学习算法中扮演着不可或缺的角色。 相似矩…...

攻防世界—webbaby详解

1.ssrf注入漏洞 ssrf&#xff08;服务端请求伪造&#xff09;是一种安全漏洞&#xff0c;攻击者通过该漏洞向受害服务器发出伪造的请求&#xff0c;从而访问并获取服务器上的资源&#xff0c;常见的ssrf攻击场景包括访问内部网络的服务&#xff0c;执行本地文件系统命令&#…...

MySQL中:cmd下输入命令mysql -uroot -p 连接数据库错误

目录 问题cmd下输入命令mysql -uroot -p错误 待续、更新中 问题 cmd下输入命令mysql -uroot -p错误 解决 配置环境变量&#xff1a;高级系统设置——环境变量——系统变量——path编辑——新建——MySQL.exe文件路径&#xff08;如下图所示&#xff09; phpstudy2018软件下&am…...

【开发利器】使用OpenCV算子工作流高效开发

学习《人工智能应用软件开发》&#xff0c;学会所有OpenCV技能就这么简单&#xff01; 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; OpenCV实验大师Python SDK 基于OpenCV实验大师v1.02版本提供的Python SDK 实现工作流导出与第三方应用集…...

基础数学-求平方根(easy)

一、问题描述 二、实现思路 1.题目不能直接调用Math.sqrt(x) 2.这个题目可以使用二分法来缩小返回值范围 所以我们在left<right时 使 mid (leftright)/21 当mid*mid>x时&#xff0c;说明right范围过大&#xff0c;rightright-1 当mid*mid<x时&#xff0c;说明left范…...

c语言项目-贪吃蛇项目2-游戏的设计与分析

文章目录 前言游戏的设计与分析地图&#xff1a;这里简述一下c语言的国际化特性相关的知识<locale.h> 本地化头文件类项setlocale函数 上面我们讲到需要打印★&#xff0c;●&#xff0c;□三个宽字符找到这三个字符打印的方式有两种&#xff1a; 控制台屏幕的长宽特性&a…...

力扣2831.找出最长等值子数组

力扣2831.找出最长等值子数组 思路&#xff1a;用二维数组存每个数字的出现下标 遍历所有数字求结果当前子数组大小&#xff1a;pos[i] - pos[j] 1;当前相同数个数&#xff1a;i - j 1;需要删去的数的个数&#xff1a;pos[i] - pos[j] - i j; class Solution {public:int…...

17K star,一款开源免费的手机电脑无缝同屏软件

导读&#xff1a;白茶清欢无别事&#xff0c;我在等风也等你。 作为程序员&#xff0c;在我们的工作中经常需要把手机投票到电脑进行调试工作&#xff0c;选择一款功能强大的投屏软件是一件很必要的事情。今天给大家介绍一款开源且免费的投屏软件&#xff0c;极限投屏&#xff…...

正则表达式二

修饰符 i&#xff1a;将匹配设置为不区分大小写&#xff0c;即A和a没有区别 var str"Google Runoob taobao runoob"; var n1str.match(/runoob/g); //runoob var n2str.match(/runoob/gi); //Runoob&#xff0c;runoobg&#xff1a;重找所有匹配项&#xff0…...

我的创作纪念日--我和CSDN一起走过的1825天

机缘 第一次在CSDN写文章&#xff0c;是自己在记录学习Java8新特性中Lambda表达式的内容过程中收获的学习心得。之前也有记录工作和生活中的心得体会、难点的解决办法、bug的排查处理过程等等。一直都用的有道笔记&#xff0c;没有去和大家区分享的想法&#xff0c;是一起的朋…...

递归书写树形图示例

大叫好&#xff0c;今天书写了一个扁型转换为树型的例子&#xff0c;使用的是递归&#xff0c;请大家食用&#xff0c;无毒 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" conte…...

【python】IndexError: Replacement index 1 out of range for positional args tuple

成功解决“IndexError: Replacement index 1 out of range for positional args tuple”错误的全面指南 一、引言 在Python编程中&#xff0c;IndexError: Replacement index 1 out of range for positional args tuple这个错误通常发生在使用str.format()方法或者f-string&am…...

Spring自带定时任务@Scheduled注解

文章目录 1. cron表达式生成器2. 简单定时任务代码示例&#xff1a;每隔两秒打印一次字符3. Scheduled注解的参数3.1 cron3.2 fixedDelay3.3 fixedRate3.4 initialDelay3.5 fixedDelayString、fixedRateString、initialDelayString等是String类型&#xff0c;支持占位符3.6 tim…...

代码随想录算法训练营第二十九天|LeetCode491 非递减子序列、LeetCode46 全排列、LeetCode47 全排列Ⅱ

题1&#xff1a; 指路&#xff1a;491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 对于这个题我们应该想起我们做过的子集问题&#xff0c;就是在原来的问题上加一个去重操作。我们用unordered_set集合去重&#xff0c;集合中使用过的元…...

初识C++ · 优先级队列

目录 前言&#xff1a; 1 优先级队列的使用 2 优先级队列的实现 3 仿函数 前言&#xff1a; 栈和队列相对其他容器来说是比较简单的&#xff0c;在stl里面&#xff0c;有一种容器适配器是优先级队列&#xff08;priority_queue&#xff09;&#xff0c;它也是个队列&#…...

php反序列化入门

一&#xff0c;php面向对象。 1.面向对象&#xff1a; 以“对象”伪中心的编程思想&#xff0c;把要解决的问题分解成对象&#xff0c;简单理解为套用模版&#xff0c;注重结果。 2.面向过程&#xff1a; 以“整体事件”为中心的编程思想&#xff0c;把解决问题的步骤分析出…...

嵌入式 Linux LED 驱动开发实验学习

I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上&#xff0c;进行这个驱动开发实验之前&#xff0c;需要了解下地址映射。 地址映射 MMU 全称叫做 MemoryManage Unit&#xff0c;也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU&#x…...

C++:多态

文章目录 多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写override 和 final重载、重写&#xff08;覆盖&#xff09;、重定义&#xff08;隐藏&#xff09;的对比 抽象类概念接口继承和实现继承 多态的原理虚函数表多态的原理 单继承和多继承关系的虚函数表单继承…...

Java事务入门:从基础概念到初步实践

Java事务入门&#xff1a;从基础概念到初步实践 引言1. Java事务基础概念1.1 什么是事务&#xff1f;1.2 为什么需要事务&#xff1f; 2. Java事务管理2.1 JDBC 的事务管理2.2 Spring 事务管理2.2.1 Spring JDBC2.2.1.1 添加 Spring 配置2.2.1.2 添加业务代码并测试验证 2.2.2…...

鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory

内存管理模块管理系统的内存资源&#xff0c;它是操作系统的核心模块之一&#xff0c;主要包括内存的初始化、分配以及释放。 在系统运行过程中&#xff0c;内存管理模块通过对内存的申请/释放来管理用户和OS对内存的使用&#xff0c;使内存的利用率和使用效率达到最优&#x…...

从头搭hadoop集群--分布式hadoop集群搭建

模板虚拟机安装配置见博文&#xff1a;https://blog.csdn.net/weixin_66158110/article/details/139236148 配置文件信息如下&#xff1a;https://pan.baidu.com/s/1074eD5aNVugEPcjwVvi9jA?pwdl1xq&#xff08;提取码&#xff1a;l1xq&#xff09; hadoop版本&#xff1a;h…...

odoo10 权限控制用户只允许看到自己的字段

假设一个小区管理员用户&#xff0c;只想看到自己小区的信息。 首先添加一个用户信息选项卡界面&#xff0c;如下图的 用户 > 隶属信息&#xff1a; 我们在自己创建的user模块中&#xff0c;views文件夹下添加base_user.xml <?xml version"1.0" encoding&q…...

图解Mysql索引原理

概述 是什么 索引像是一本书的目录列表&#xff0c;能根据目录快速的找到具体的书本内容&#xff0c;也就是加快了数据库的查询速度索引本质是一个数据结构索引是在存储引擎层&#xff0c;而不是服务器层实现的&#xff0c;所以&#xff0c;并没有统一的索引标准&#xff0c;…...

Arduino网页服务器:如何将Arduino开发板用作Web服务器

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我将和大家分享一个有趣且实用的项目——如何使用Arduino开发板搭建一个简易的网页服务器。通过这个项目&#xff0c;你可以将Arduino连接到互联网&#xff0c;并通过网页控制或查询Arduino的状态。 一、项目背景与…...

大模型日报2024-06-05

大模型日报 2024-06-05 大模型资讯 AI气象预测取得重大进展&#xff1a;单台桌面电脑即可运行全球天气模型 摘要: 一项新的人工智能天气预测模型已经取得重大进展&#xff0c;该模型能够在一台普通的桌面电脑上运行&#xff0c;预测全球天气。这意味着即使没有复杂的物理计算&a…...

LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关

角色扮演&#xff1a;在系统指令中告诉千问你需要它扮演的角色&#xff0c;即可沉浸式和该角色对话交流语言风格&#xff1a;简单调整 LLM 的语言风格任务设定&#xff1a;比如旅行规划&#xff0c;小红书文案助手这样的专项任务处理System message 也可以被用于规定 LLM 的答复…...

Spring系统学习 - Spring入门

什么是Spring&#xff1f; Spring翻译过来就是春天的意思&#xff0c;字面意思&#xff0c;冠以Spring的意思就是想表示使用这个框架&#xff0c;代表程序员的春天来了&#xff0c;实际上就是让开发更加简单方便&#xff0c;实际上Spring确实做到了。 官网地址&#xff1a;ht…...

自己在线制作图片免费下载/夫唯老师seo

作业需求&#xff1a; 用户入口&#xff1a;1.商品信息存在文件里 2.已购商品&#xff0c;余额记录。第一次启动程序时需要记录工资&#xff0c;第二次启动程序时谈出上次余额 3.允许用户根据商品编号购买商品 4.用户选择商品后&#xff0c;检测是否够&#xff0c;够就直接扣款…...

广州怎么做网站/发外链的平台有哪些

在我的&#xff1c;&#xff1c;也谈测试驱动开发&#xff1e;&#xff1e;里&#xff0c;提出了对方法级别的测试应该在实际代码的旁边来写的建议。   不同的博客有不同的看法&#xff0c;我尊重大家的意思&#xff0c;但某些问题似乎不是提得很明确&#xff0c;也可能是因为…...

wordpress 淘客代码/上海专业排名优化公司

封装并查集类 萌新码风&#xff0c;功能有限&#xff0c;还请赐教。 成员变量 集合规模 n 父节点数组 fa 构造方法 两个构造方法 需要传入集合规模n&#xff0c;以便创建数组对象&#xff0c;默认规模为10000。 私有方法 查询根节点方法&#xff1a;int GetFather(int k…...

法律电商如何做网站推广营销/网络推广官网首页

一、GitBook 简介 GitBook 是一个基于 Node.js 的命令行工具&#xff0c;可使用 Github/Git 和 Markdown 来制作精美的电子书、开发文档等。 GitBook支持输出多种文档格式&#xff1a; 静态站点&#xff1a;GitBook默认输出该种格式&#xff0c;生成的静态站点可直接托管搭载G…...

网络班级网站建设/杭州优化公司多少钱

Eclipse 安装(Neon 版本) Eclipse 最新版本 Eclipse Neon&#xff0c;这个首次鼓励用户使用 Eclipse Installer 来做安装&#xff0c;这是一种由Eclipse Oomph提供的新技术&#xff0c;它通过提供一个很小的安装器来使得各种工具可以按需下载和安装。 需要框架源码的朋友可以…...

深圳网站建设行业新闻/宁波seo排名优化哪家好

1.准备材料 首先电脑上需要安装了python&#xff0c;安装了opencv更好&#xff08;非必需&#xff09; 如果安装了opencv的话&#xff0c;在opencv的python目录下找到cv2.pyd&#xff0c;将该文件放到python的库搜索路径就可以导入了 然后下载itchat&#xff1a;github 2.开始…...