【SQL应知应会】表分区(一)• Oracle版

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【SQL应知应会】表分区(一)• Oracle版

前言

✅对于表分区这块内容,我们在MySQL方面已经有五篇内容了,大家可以去我的专栏SQL应知应会进行学习

🆗今天这篇内容,开始Oracle的表分区,如果大家学习过前面MySQL的表分区的话,那么对于今天的内容是很轻松就可以学会的,当然,这并没有严格的学习顺序的安排,只是对于MySQL的表分区,我们花了大量的篇幅进行学习,大家可以根据自己的学习情况进行随意的选择学习顺序(无需有过多的顾虑)

✳️今天这篇Oracle,主要是对建立表分区进行了学习,比如创建范围分区表、创建列表分区表一系列知识点,其中有代码帮助大家去学习与理解,要 注意Oracle与MySQL的区别,在列表分区表就有所体现,大家可以自己在Navicar或者PL/SQL或者其他工具上进行代码的学习, 最好不要只看懂文章,只有多多练习,才能发现自己的错误并锻炼解决问题的能力。

希望文章的内容对大家有所帮助,如果有什么不足的地方,大家可以在评论区或者私信我,感谢大家的支持

💻那么,快拿出你的电脑,跟着文章一起学习起来吧


一、分区表

1.什么是表分区

在oracle数据库中,当表中数据量达到GB级别时,为了方便对表中数据的管理,可以考虑将表进行分区。

所谓分区就是将一个巨型表分成若干个独立的组成部分进行存储和管理,每个相对小的、可以独立管理的部分,称为原来表的分区。

表分区后,可以对表的分区进行独立的存取和控制。

每个分区都具有相同的逻辑属性,但物理属性可以不同

如 具有相同列、相同数据类型、相同约束等,但可以具有不同的存储参数、位于不同的表空间中


1.1 分区的意义

学习多表关联的时候 两个表关联的时候,对于关联不上的数据使用null填充,这种关联相当于关联的时候还是要找A的每条数据都要去B里所有数据遍历一遍,效率较慢,常见的有些连接算法可以用,join也并不是A中的一条数据与B中所有数据关联

如果有分区的话,是最明显的优化,分区与分区的数据进行关联,这种关联只能发生在等值关联,所以做SQL的等值判断效率是最高的,使用大于(>)、小于(<)、not in这些的效率都不是很高,而in或等值连接或者多加几个分区(让扫描到更少的分区来提升效率)

1.2 分区的作用

增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用

维 护 方 便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可

如运行时网络中断导致数据出问题

均 衡 I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能

改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度

对巨型表进行分区具有下列优点:


提高 数据的安全性,一个分区的损坏不影响其他分区中数据的正常使用;

将表的各个分区存储在不同磁盘上,提高数据的并行操作能力;

简化数据的管理,可以将某些分区设置为不可用状态,某些分区设置为可用状态,某些分区设置为只读状态,某些分区设置为读/写状态;

操作的透明性,对表进行分区并不影响操作数据的SQL语句。

1.3 表分区的方法

在oracle 11g数据库中,对表进行分区有多种方法。


范围分区(range) :根据分区列值的范围对表进行分区,每条记录根据其分区列值所在的范围决定存储到哪个分区中

范围分区是最常用的分区方法,特别适合根据日期进行分区的情况。

列表分区(list):如果分区列的值不能划分范围(非数值类型或日期类型),同时分区列的取值是一个包含少数值的集合,可以采用列表分区,将特定分区列值的记录保存到特定分区中。

散列分区:又称HASH分区,是采用基于分区列值的HASH算法,将数据均匀分布到指定的分区中

一个记录到底分布到哪个分区是由HASH函数决定的。

复合分区(range—list,range--hash):结合两种基本分区方法,先采用一个分区方法对表或索引进行分区,然后再采用另一个分区方法将分区再分成若干个子分区。每个分区的子分区都是数据的一个逻辑子集。

复合分区包括范围-范围复合分区、范围-散列复合分区、范围-列表复合分区、列表-范围复合分区、列表-散列复合分区、列表-列表复合分区等多种分区方法

在oracle 11g数据库中,分区技术得到进一步的增强,引入了间隔分区、引用分区、基于虚拟列分区以及系统分区(system Partitioning)等多种分区方法


2.创建分区表

2.1 创建范围分区表

2.1.1 基本语法

使用带 partition by range子句的 create table 语句创建范围分区表


CREATE TABLE table(...)
PARTITION BY RANGE (column1[,column2,...])
(PARTITION partition1 VALUES LESS THAN(literal|MAXVALUE)
[TABLESPACE tablespace]
[,PARTITION partition2 VALUES LESS THAN(literal|MAXVALUE)
[TABLESPACE tablespace],...]
)
...
# PARTITION BY RANGE : 指明采用范围分区方法
# column : 分区列,可以是单列分区,也可以是多列分区
# PARTITION partition1 : 设置分区名称
# VALUES LESS THAN : 设置分区列值得上界
# TABLESPACE : 设置分区对应的表空间
## 分区列可以是多列,叫作组合字段分区
## 少用LESS THAN(MAXVALUE)

2.1.2 示例

创建一个分区表,将学生信息根据其出生日期进行分区

将1980年1月1日前出生的学生信息保存在ORCLTBS1表空间中

将1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS2表空间中

将其他学生信息保存在ORCLTBS3表空间中

CREATE TABLE student_range(
  sno NUMBER(6) PRIMARY KEY,
  sname VARCHAR2(10),
    sage int,
    birthday DATE
)
PARTITION BY RANGE(birthday)
(
    PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1','YYYY-MM-DD')) TABLESPACE ORCLTBS1,
    PARTITION p2 VALUES LESS THAN(TO_DATE('1990-1-1','YYYY-MM-DD')) TABLESPACE ORCLTBS2,
    PARTITION p1 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS3,
);


创建分区表后,通过修改分区表的各个分区所在的表空间的状态,可以实现对表分区的不同操作

可以将表的部分分区设置为脱机状态或只读状态,但不影响其他分区的使用


2.2 创建列表分区表

2.2.1 基本语法

使用带 PARTITION BY LIST子句的 CREATE TABLE语句创建列表分区表,基本语法:


Oracle的list分区values后没有in
MySQL的list分区values后有in
CREATE TABLE table(...)
PARTITION BY LIST (column)
(PARTITION partition1 VALUES(literal|NULL|[DEFAULT])
[TABLESPACE tablespace]
[,PARTITION partition2 VALUES(literal|NULL|[DEFAULT])
[TABLESPACE tablespace],...]
)

2.2.2 示例

创建一个分区表,将学生信息按性别不同进行分区

男学生信息保存在ORCLTBS1表空间中

将女学生信息保存在ORCLTBS2表空间中

CREATE TABLE student_list(
  sno NUMBER(6) PRIMARY KEY,
  sname VARCHAR2(10),
    sage int,
    sex VARCHAR(2) CHECK(sex in ('M','F'))
)
PARTITION BY LIST(sex)
(
    PARTITION student_male VALUES('M') TABLESPACE ORCLTBS1,
    PARTITION student_female VALUES('F') TABLESPACE ORCLTBS2
);

小结

😘感谢大家耐心的看完这篇文章,这篇文章是Oracle的表分区,对于SQL在表分区的知识点,我们在MySQL方面已经有五篇内容了,大家可以去我的专栏SQL应知应会 进行学习,如果大家觉着还算可以,那么就给个三连支持一下吧

🏡也可以加入我的社区一起学习呀

✅如果想要继续关注和学习后续更多的内容,那就关注一下爱书不爱输的程序猿吧,当然,如果大家还有什么其他方面的知识点想要看,可以在评论区或者私信我

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
2月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
81 3
|
2月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
70 1
|
5月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
375 3
|
5月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
131 0
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
133 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
5月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
69 6
|
5月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
457 1

推荐镜像

更多
下一篇
DataWorks