ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL分区

2022-05-07 17:33:50  阅读:153  来源: 互联网

标签:10 less 分区 PARTITION VALUES SQL DEPTNO


---分区 把一个表的数据按照字段的值,保存在多个区域,查询时,仅仅查询某一个或者多个区域,避免全表扫描。

--建表的时候,需要指定分区字段 以及 预制的分区。先要划好分区,才能插入数据。

列表分区

---不连续的,零散的字段的值,作为分区,常采用list列表类型

CREATE TABLE MYEMP2 ( EMPNO NUMBER(4) PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(7,2) )
PARTITION BY LIST(DEPTNO) 
( 
PARTITION MYEMP_DEPTNO_10 VALUES (10), 
PARTITION MYEMP_DEPTNO_20 VALUES (20), 
PARTITION MYEMP_DEPTNO_30 VALUES (30), 
PARTITION MYEMP_DEPTNO_40 VALUES (40) 
)

---只查询某一个具体的分区的名称进行查询

select * from MYEMP2 partition(MYEMP_DEPTNO_10);

---可以根据分区来删除数据, 清空分区10的数据

alter table MYEMP2 truncate partition MYEMP_DEPTNO_10;

---后续增加分区

alter table MYEMP2 add partition MYEMP_DEPTNO_10 VALUES (10);

---查询分区的数据

select * from MYEMP2 partition(MYEMP_DEPTNO_10); --直接查分区

--删除数据

delete from MYEMP2 partition(MYEMP_DEPTNO_10); ---删除指定分区数据
alter table MYEMP2 truncate partition(MYEMP_DEPTNO_10); --清空指定分区的数据
alter table MYEMP2 drop partition(MYEMP_DEPTNO_10); --删除分区

---练习建立一个emp_tag3 字段 empno,ename,sal ,使用sal作为分区字段,创建一个分区表 类型为 range。

CREATE TABLE emp_tag4 ( EMPNO NUMBER(4) , ENAME VARCHAR2(10),  sal number(7,2) )
PARTITION BY range(sal) 
( 
PARTITION p_1 VALUES less than (1000), 
PARTITION p_2 VALUES less than (2000), 
PARTITION p_3 VALUES less than (3000), 
PARTITION p_4 VALUES less than (4000), 
PARTITION p_5 VALUES less than (5000), 
PARTITION p_6 VALUES less than (MAXVALUE) ---如果有maxvalue,那么不可以再增加分区,无法再增加5000-6000,6000以上
);

---如果有一个表开始的时候没有见分区,现在需要给表格加分区的解决办法
---1. 重新建表,有新的分区

CREATE TABLE emp_tag5 ( EMPNO NUMBER(4) , ENAME VARCHAR2(10), sal number(7,2) )
PARTITION BY range(sal) 
( 
PARTITION p_1 VALUES less than (1000), 
PARTITION p_2 VALUES less than (2000), 
PARTITION p_3 VALUES less than (3000), 
PARTITION p_4 VALUES less than (4000), 
PARTITION p_5 VALUES less than (5000), 
partition p_7 VALUES less than (6000),
PARTITION p_6 VALUES less than (MAXVALUE)
);

2. 插入原表中已有有的数据

insert into emp_tag5 select * from empt_tag4

3. 把新表名称,修改回去

alter table emp_tag4 rename to emp_tag4_bak;
alter table emp_tag5 rename to emp_tag4;


----索引和分区区别

1. 分区不用建额外的索引表,占空间
2. 分区的性能优于索引

标签:10,less,分区,PARTITION,VALUES,SQL,DEPTNO
来源: https://www.cnblogs.com/qianmojie/p/16243377.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有