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

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流
本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle

分区表 • Oracle版

  • 前言
  • 一、分区表
  • 1.什么是表分区
  • 2.创建分区表
    • [2.1 创建范围分区表](#2.1 创建范围分区表)
    • [2.2 创建列表分区表](#2.2 创建列表分区表)
    • [2.3 创建散列分区表](#2.3 创建散列分区表)
      • [2.3.1 基本语法](#2.3.1 基本语法)
      • [2.3.2 示例1](#2.3.2 示例1)
      • [2.3.2 示例2](#2.3.2 示例2)
    • [2.4 创建复合分区表](#2.4 创建复合分区表)
      • [2.4.1 示例1 范围-列表复合分区](#2.4.1 示例1 范围-列表复合分区)
      • [2.4.3 示例2 范围-散列复合分区](#2.4.3 示例2 范围-散列复合分区)
  • 小结

前言

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

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

✳️今天这篇主要讲了如何创建散列分区表,其中有两种方法分别在两个例子中进行了使用,然后就是讲了创建复合分区表,包括范围-列表复合分区与范围-散列复合分区

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

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

一、分区表

1.什么是表分区

👉:传送门💖什么是表分区💖

1.1 分区的意义

1.2 分区的作用

1.3 表分区的方法

2.创建分区表

2.1 创建范围分区表

👉:传送门💖创建范围分区表💖

2.1.1 基本语法

2.1.2 示例

2.2 创建列表分区表

👉:传送门💖创建列表分区表💖

2.2.1 基本语法

2.2.2 示例

2.3 创建散列分区表

使用范围分区和列表分区方法都可能导致数据分布不均匀,此时可以采用散列分区方法,将数据均匀分布到指定的分区中。

2.3.1 基本语法

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

sql 复制代码
CREATE TABLE table(...)
PARTITION BY HASH (column1[,column2,...])
[(PARTITION partition [TABLESPACE tablespace][,...])]|[PARTITION hash_partition_quantity STORE IN (tablespace1[,...])]
...
  • 通过PARTITION BY HASH 指定分区方法,其后的括号指定分区列
  • 使用PARTITION子句指定每个分区名称和其存储空间
  • 或者使用PARTITION子句指定分区数量,用STORE IN子句指定分区存储空间

2.3.2 示例1

  • 通过PARTITION BY HASH 指定分区方法,其后的括号指定分区列
  • 使用PARTITION子句指定每个分区名称和其存储空间

示例: 创建一个分区表,根据学号将学生信息均匀分布到ORCLTBS1和ORCLTBS2两个表空间中

sql 复制代码
CREATE TABLE student_hash(
	sno NUMBER(6) PRIMARY KEY,
	sname VARCHAR2(10)
)
PARTITION BY HASH(sno)
(
    PARTITOIN p1 TABLESPACE ORCLTBS1,
    PARTITOIN p1 TABLESPACE ORCLTBS2
);

2.3.2 示例2

  • 使用PARTITION子句指定分区数量,用STORE IN子句指定分区存储空间

示例: 创建一个分区表,根据学号将学生信息均匀分布到ORCLTBS1和ORCLTBS2两个表空间中

sql 复制代码
# 用STORE IN子句指定分区存储空间创建分区表
CREATE TABLE student_hash(
	sno NUMBER(6) PRIMARY KEY,
	sname VARCHAR2(10)
)
PARTITION BY HASH(sno)
PARTITION 2 STORE IN (ORCLTBS1,ORCLTBS2);

2.4 创建复合分区表

创建复合分区表时,首先在CREATE TABLE语句中使用PARTITION BY子句指定分区方法、分区列,然后使用SUBPARTITION BY子句指定子分区方法、子分区列、子分区数量及子分区的描。

2.4.1 示例1 范围-列表复合分区

  • 创建一个范围-列表复合分区表,将1980年1月1日前出生的男、女学生信息分别保存在ORCLTBS1和ORCLTBS2两个表空间中,1980年1月1日到1990年1月1日出生的男、女学生信息分别保存在ORCLTBS3和ORCLTBS4两个表空间中,其他学生信息保存在ORCLTBS5表空间中
sql 复制代码
CREATE TABLE student_range_list(
	sno NUMBER(6) PRIMARY KEY,
	sname VARCHAR2(10),
    sex VARCHAR(2) CHECK(sex in ('M','F')),
    sage NUMBER(4),
    birthday DATE
)
PARTITION BY RANGE(birthday)
SUBPARTITION BY LIST(sex)
(
    PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1','YYYY-MM-DD'))
    (
        SUBPARTITION p1_sub1 VALUES('M') TABLESPACE ORCLTBS1,
        SUBPARTITION p1_sub2 VALUES('F') TABLESPACE ORCLTBS2        
    ),
    PARTITION p2 VALUES LESS THAN(TO_DATE('1990-1-1','YYYY-MM-DD'))
    (
        SUBPARTITION p2_sub1 VALUES('M') TABLESPACE ORCLTBS3,
        SUBPARTITION p2_sub2 VALUES('F') TABLESPACE ORCLTBS4        
    ),
    PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5
)

2.4.3 示例2 范围-散列复合分区

  • 创建一个范围-散列复合分区表,将1980年1月1日前出生学生信息分别保存在ORCLTBS1和ORCLTBS2两个表空间中,1980年1月1日到1990年1月1日出生的学生信息分别保存在ORCLTBS3和ORCLTBS4两个表空间中,其他学生信息保存在ORCLTBS5表空间中
sql 复制代码
CREATE TABLE student_range_list(
	sno NUMBER(6) PRIMARY KEY,
	sname VARCHAR2(10),
    sage NUMBER(4),
    birthday DATE
)
PARTITION BY RANGE(birthday)
SUBPARTITION BY HASH(sage)
(
    PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1','YYYY-MM-DD'))
    (
        SUBPARTITION p1_sub1 TABLESPACE ORCLTBS1,
        SUBPARTITION p1_sub2 TABLESPACE ORCLTBS2        
    ),
    PARTITION p2 VALUES LESS THAN(TO_DATE('1990-1-1','YYYY-MM-DD'))
    (
        SUBPARTITION p2_sub1 TABLESPACE ORCLTBS3,
        SUBPARTITION p2_sub2 TABLESPACE ORCLTBS4        
    ),
    PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5
)

小结

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

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

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

相关推荐
Fan16 分钟前
Elasticsearch 下载安装及使用总结
大数据·elasticsearch·jenkins
大王只是带我巡了个山17 分钟前
优化 OR 条件过多导致的查询超时
数据库·mysql·join·or 优化·or 超时·查询超时
木鬼与槐29 分钟前
MySQL高阶1892-页面推荐2
mysql
gma9991 小时前
MySQL程序
数据库·mysql
神秘的土鸡1 小时前
Linux中Docker容器构建MariaDB数据库教程
linux·运维·服务器·数据库·docker·mariadb
汪公子4921 小时前
使用k8s搭建mariadb+nginx+wordpress
数据库·nginx·mariadb
Java__攻城狮1 小时前
navicat无法连接远程mysql数据库1130报错的解决方法
数据库·mysql
爬山算法1 小时前
Oracle(129) 如何使用闪回归档(Flashback Archive)?
数据库·oracle
m0_713344851 小时前
新能源汽车数据大全(产销数据\充电桩\专利等)
大数据·人工智能·新能源汽车
程序员大金1 小时前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis