oracle sql 分区查询语句_oracle表空间表分区详解及oracle表分区查询使用方法-程序员宅基地

技术标签: oracle sql 分区查询语句  

此文从以下几个方面来整理关于分区表的概念及操作:

1.表空间及分区表的概念

2.表分区的具体作用

3.表分区的优缺点

4.表分区的几种类型及操作方法

5.对表分区的维护性操作.

(1.) 表空间及分区表的概念

表空间:

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

分区表:

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。

( 2).表分区的具体作用

Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。

什么时候使用分区表:

1、表的大小超过2GB。

2、表中包含历史数据,新的数据被增加都新的分区中。

(3).表分区的优缺点

表分区有以下优点:

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

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

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

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

缺点:

分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

(4).表分区的几种类型及操作方法

一.范围分区:

范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。举个例子:你可能会将销售数据按照月份进行分区。

当使用范围分区时,请考虑以下几个规则:

1、每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。

2、所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。

3、在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,也可以理解为高于任何分区中指定的VALUE LESS THEN的值,同时包括空值。

例一:

假设有一个CUSTOMER表,表中有数据200000行,我们将此表通过CUSTOMER_ID进行分区,每个分区存储100000行,我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码,如下:

CREATE TABLE CUSTOMER

(

CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,

FIRST_NAME  VARCHAR2(30) NOT NULL,

LAST_NAME   VARCHAR2(30) NOT NULL,

PHONEVARCHAR2(15) NOT NULL,

EMAILVARCHAR2(80),

STATUS       CHAR(1)

)

PARTITION BY RANGE (CUSTOMER_ID)

(

PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,

PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02

)

例二:按时间划分

CREATE TABLE ORDER_ACTIVITIES

(

ORDER_ID      NUMBER(7) NOT NULL,

ORDER_DATE    DATE,

TOTAL_AMOUNT NUMBER,

CUSTOTMER_ID NUMBER(7),

PAID   CHAR(1)

)

PARTITION BY RANGE (ORDER_DATE)

(

PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACEORD_TS01,

PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02,

PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03

)

例三:MAXVALUE

CREATE TABLE RangeTable

(

idd   INT PRIMARY KEY ,

iNAME VARCHAR(10),

grade INT

)

PARTITION  BY  RANGE (grade)

(

PARTITION  part1 VALUES  LESS  THEN (1000) TABLESPACE  Part1_tb,

PARTITION  part2 VALUES  LESS  THEN (MAXVALUE) TABLESPACE  Part2_tb

);

二.列表分区:

该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。

例一

CREATE TABLE PROBLEM_TICKETS

(

PROBLEM_ID   NUMBER(7) NOT NULL PRIMARY KEY,

DESCRIPTION  VARCHAR2(2000),

CUSTOMER_ID  NUMBER(7) NOT NULL,

DATE_ENTERED DATE NOT NULL,

STATUS       VARCHAR2(20)

)

PARTITION BY LIST (STATUS)

(

PARTITION PROB_ACTIVE   VALUES ('ACTIVE') TABLESPACE PROB_TS01,

PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02

)

例二

CREATE  TABLE  ListTable

(

id    INT  PRIMARY  KEY ,

name  VARCHAR (20),

area  VARCHAR (10)

)

PARTITION  BY  LIST (area)

(

PARTITION  part1 VALUES ('guangdong','beijing') TABLESPACE  Part1_tb,

PARTITION  part2 VALUES ('shanghai','nanjing')  TABLESPACE  Part2_tb

);

)

三.散列分区:

这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

例一:

CREATE TABLE HASH_TABLE

(

COL NUMBER(8),

INF VARCHAR2(100)

)

PARTITION BY HASH (COL)

(

PARTITION PART01 TABLESPACE HASH_TS01,

PARTITION PART02 TABLESPACE HASH_TS02,

PARTITION PART03 TABLESPACE HASH_TS03

)

简写:

CREATE TABLE emp

(

empno NUMBER (4),

ename VARCHAR2 (30),

sal   NUMBER

)

PARTITION BY  HASH (empno) PARTITIONS 8

STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);

hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。

四.组合范围散列分区

这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。

CREATE TABLE SALES

(

PRODUCT_ID VARCHAR2(5),

SALES_DATE DATE,

SALES_COST NUMBER(10),

STATUS VARCHAR2(20)

)

PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)

(

PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009

(

SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,

SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009

),

PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009

(

SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,

SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009

)

)

五.复合范围散列分区:

这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。

create table dinya_test

(

transaction_id number primary key,

item_id number(8) not null,

item_description varchar2(300),

transaction_date date

)

partition by range(transaction_date)subpartition by hash(transaction_id)  subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)

(

partition part_01 values less than(to_date(‘2006-01-01','yyyy-mm-dd')),

partition part_02 values less than(to_date(‘2010-01-01','yyyy-mm-dd')),

partition part_03 values less than(maxvalue)

);

(5).有关表分区的一些维护性操作:

一、添加分区

以下代码给SALES表添加了一个P3分区

ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));

注意:以上添加的分区界限应该高于最后一个分区界限。

以下代码给SALES表的P3分区添加了一个P3SUB1子分区

ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');

二、删除分区

以下代码删除了P3表分区:

ALTER TABLE SALES DROP PARTITION P3;

在以下代码删除了P4SUB1子分区:

ALTER TABLE SALES DROP SUBPARTITION P4SUB1;

注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。

三、截断分区

截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区:

ALTER TABLE SALES TRUNCATE PARTITION P2;

通过以下代码截断子分区:

ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;

四、合并分区

合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:

ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;

五、拆分分区

拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。

ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);

六、接合分区(coalesca)

结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下代码进行接合分区:

ALTER TABLE SALES COALESCA PARTITION;

七、重命名表分区

以下代码将P21更改为P2

ALTER TABLE SALES RENAME PARTITION P21 TO P2;

八、相关查询

跨分区查询

select sum( *) from

(select count(*) cn from t_table_SS PARTITION (P200709_1)

union all

select count(*) cn from t_table_SS PARTITION (P200709_2)

);

查询表上有多少分区

SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'

查询索引信息

select object_name,object_type,tablespace_name,sum(value)

from v$segment_statistics

where statistic_name IN ('physical reads','physical write','logical reads')and object_type='INDEX'

group by object_name,object_type,tablespace_name

order by 4 desc

--显示数据库所有分区表的信息:

select * from DBA_PART_TABLES

--显示当前用户可访问的所有分区表信息:

select * from ALL_PART_TABLES

--显示当前用户所有分区表的信息:

select * from USER_PART_TABLES

--显示表分区信息 显示数据库所有分区表的详细分区信息:

select * from DBA_TAB_PARTITIONS

--显示当前用户可访问的所有分区表的详细分区信息:

select * from ALL_TAB_PARTITIONS

--显示当前用户所有分区表的详细分区信息:

select * from USER_TAB_PARTITIONS

--显示子分区信息 显示数据库所有组合分区表的子分区信息:

select * from DBA_TAB_SUBPARTITIONS

--显示当前用户可访问的所有组合分区表的子分区信息:

select * from ALL_TAB_SUBPARTITIONS

--显示当前用户所有组合分区表的子分区信息:

select * from USER_TAB_SUBPARTITIONS

--显示分区列 显示数据库所有分区表的分区列信息:

select * from DBA_PART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的分区列信息:

select * from ALL_PART_KEY_COLUMNS

--显示当前用户所有分区表的分区列信息:

select * from USER_PART_KEY_COLUMNS

--显示子分区列 显示数据库所有分区表的子分区列信息:

select * from DBA_SUBPART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的子分区列信息:

select * from ALL_SUBPART_KEY_COLUMNS

--显示当前用户所有分区表的子分区列信息:

select * from USER_SUBPART_KEY_COLUMNS

--怎样查询出oracle数据库中所有的的分区表

select * from user_tables a where a.partitioned='YES'

--删除一个表的数据是

truncate table table_name;

--删除分区表一个分区的数据是

alter table table_name truncate partition p5;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39567046/article/details/111537267

智能推荐

django+mysql高校宿舍管理系统-计算机毕业设计源码69305-程序员宅基地

文章浏览阅读377次,点赞2次,收藏5次。系统管理员业务:主要包括学生管理、宿管管理、宿舍管理、楼栋管理、违纪管理。宿舍管理员业务:主要包括个人信息管理、学生信息管理、宿舍管理、违纪处理。学生业务:主要包括个人信息管理、查看违纪情况、申请换宿舍、申请维修、查看公告。此系统的设计实现了基本数据、学生管理、信息管理、床位管理、物品管理、违纪管理、动态监控、学生统计、人员管理和环境监测监控等一系列宿舍信息管理功能。_高校宿舍管理系统

C++重新认知:构造函数和析构函数-程序员宅基地

文章浏览阅读919次,点赞23次,收藏19次。析构函数是一个成员函数,当创建的对象超出范围时或通过调用delete或者时delete[]显式销毁创建的对象时,会自动调用析构函数。当类必须显式释放资源时(),程序员就必须自己定义一个析构函数了。1) 使用了动态分配的内存:当一个类使用了new运算符进行动态内存分配(例如使用了指针或动态数组),那么就需要在析构函数中使用delete或delete[]来释放分配的内存,以防止内存泄漏。2)使用了其他资源:除了内存之外,对象还可能使用其他资源,如文件句柄、网络连接等。

Git(二)分支管理与远程仓库操作_enumerating objects: 21, done. counting objects: 1-程序员宅基地

文章浏览阅读442次。上一次写了Git的简介、安装、版本库创建,文件的创建,修改,删除等操作。这次写写别的文章结构一、远程仓库1、添加远程库2、从远程库克隆一、远程仓库如果只是在一个仓库管理文件历史,Git和其他版本控制系统有啥区别?这篇文章开始,就要深入学习Git了(深呼吸~),作为一个分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机..._enumerating objects: 21, done. counting objects: 100% (21/21), done. delta c

底部带有Indicator的RadioButton,自定义View -- UnderLineRadioBtn的实现_radiobutton indicator-程序员宅基地

文章浏览阅读628次。github项目地址:https://github.com/Jerry930326/UnderLineRadioBtn前言:该项目实现效果为RadioButton仿照TabLayout底部的Indicator下划线,可通过自定义属性和暴露的方法进行:1、文字默认/选中颜色设置;2、下划线默认/选中颜色设置;3、下划线的宽、高;4、下划线的圆角。实现该效果我先使用了layer-list方式,之后自..._radiobutton indicator

[Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解_python 直方图增强-程序员宅基地

文章浏览阅读5.4k次,点赞8次,收藏47次。欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍。第二部分将讲解图像运算和图像增强,前面的文章详细介绍了图像灰度变换和阈值变换。本篇文章将结合直方图分别对比图像灰度变换前后的变化,方便读者更清晰地理解灰度变换和阈值变换。希望文章对您有所帮助,如果有不足之处,还请海涵。..._python 直方图增强

TX2刷机和软件安装过程记录_deprecationwarning: pkg_resources is deprecated as-程序员宅基地

文章浏览阅读6.9k次,点赞5次,收藏55次。最近在使用英伟达TX2,在环境配置方面反反复复花了不少时间,踩到了一些坑,做一个记录防止以后又要重装系统准备数据线、键盘、鼠标、显示器少不掉(显示器要支持HDMI接口,我看网上说HDMI转VGA的会黑屏,没有试过)有Ubuntu16或Ubuntu18的虚拟机,或电脑作为主机(Ubuntu20.04不行,因为我电脑就是,第一次装了没法用)有网的环境,而且网速一定要好,我在实验室里网速一般,经常下载失败使用SDKmanager刷机打开准备的Ubuntu系统作为主机注意 如果使用虚拟机需要分配_deprecationwarning: pkg_resources is deprecated as an api

随便推点

数字经济与数字化转型_中国经济的数字化发展与数字化转理主要包括包括哪些-程序员宅基地

文章浏览阅读8.8k次。2020年5月13日下午,国家发展改革委官网发布“数字化转型伙伴行动”倡议。倡议提出,政府和社会各界联合起来,共同构建“政府引导—平台赋能—龙头引领—机构支撑—多元服务”的联合推进机制,以带动中小微企业数字化转型为重点,在更大范围、更深程度推行普惠性“上云用数赋智”服务,提升转型服务供给能力,加快打造数字化企业,构建数字化产业链,培育数字化生态,形成“数字引领、抗击疫情、携手创新、普惠共赢”的数字化生态共同体,支撑经济高质量发展。【3】一、数字经济内涵【2】国家在推进数字经济,涵盖三个层..._中国经济的数字化发展与数字化转理主要包括包括哪些

【已解决】./nginx: error while loading shared libraries: libssl.so.10: cannot open shared object file: No-程序员宅基地

文章浏览阅读1.8k次。那么需要安装下libssl包:compat-openssl10。_error while loading shared libraries: libssl.so.10: cannot open shared objec

Dell戴尔灵越Inspiron 7700 AIO一体机电脑原厂预装Windows10系统-程序员宅基地

文章浏览阅读969次。灵越7700一体机原装出厂系统自带声卡驱动、无线网卡驱动、面部识别等所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyDell等预装程序。由于时间关系,绝大部分资料没有上传,不是想要的型号,请联系客服获取。

ubuntu 18.04无法开机 允许root用户桌面登录_ubuntu无法进入系统网络起不来但是可以用root登录-程序员宅基地

文章浏览阅读2.4k次。教程前提是:已经知道root密码!!!1、开机后选择 “advancedoptionsforubuntu”2、选择带“recovermode”3、选择root一行;4、用vi开始操作: 4.1、vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 末尾添加以下两行: gre..._ubuntu无法进入系统网络起不来但是可以用root登录

【零基础】手把手教你用Node搭建服务器并连接MongoDB数据库_使用node搭建服务器和数据库-程序员宅基地

文章浏览阅读2.2k次,点赞29次,收藏36次。首次使用Node搭建服务器并连接MongoDB,附MongoDB注册以及创建集群详细教程,快来瞅瞅吧~欢迎小伙伴们一起交流学习~_使用node搭建服务器和数据库

Android系统设置源码分析(ROM)_rom源码分析-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏3次。PS:内容很多,花了不少时间。思维导图链接:http://pan.baidu.com/s/1jI3od4E 密码:eqsc_rom源码分析

推荐文章

热门文章

相关标签