Oracle查询优化--分区表建立/普通表转分区表

news2024/9/20 11:32:07

          本文介绍了Oracle表分区的方法,将已有的非分区表转化为分区表,也可以直接建立新的分区表,从而实现大表查询的优化。主要通过DBMS_REDEFINITION 和 alter table xxx modify 方法,DBMS_REDEFINITION 适用于所有版本,操作较为繁琐,alter table xxx modify 适用于12.2+版本,操作较为简单。

一、表分区思想

1、表分区核心思想

       表分区可以将一张大表存储在不同的物理空间或者不同磁盘,操作和物理层面关联。最终实现逻辑层面的查询sql语句不变,但物理查询时优化,扫描更少的物理空间,可以实现分散减轻BIOS操作系统及物理层级的IO读写压力。

2、表分区设计方法

       表分区时,合理的设置分区键(更有效区分数据)、将表分区分配关联到不同磁盘空间,可以更有效的提高查询效率。

         如下为oracle表存储数据大致逻辑:

        逻辑Sql语句 ==>  逻辑表 ==> 表空间 ==>  关联存储文件  ==>  不同物理磁盘

        通常不设置表分区时,一张表甚至一个数据库的所有表都在默认表空间USERS,表空间时关联.dbf文件,dbf文件位置即为表空间的磁盘存储位置。计算机对一个磁盘的IO读写通常串行,只有一个读写头,因此我们可以在不同的磁盘里建立不同的表空间,然后让一张表分区,不同的分区关联到不同表空间,就可以实现一张表存储在不同的磁盘里,实现IO并行,减轻读写压力,提高查询速度。

        建议查询该表占据2G以上再进行分区。

3、分区类型

分区通常有范围分区、间隔分区、hash分区等,根据实际业务指定易区分表数据的分区键,指定分区键后,建立的索引首先与分区键重叠,可以加速查询。

二、表分区前置操作

1、查看文件系统目录挂载的磁盘

Df -th

LVM文件系统分区挂载操作命令查看或更改文件夹挂载到不同磁盘(fdisk命令)

2、建立表空间关联到不同磁盘

在不同磁盘建立表空间

找到挂载在不同磁盘的目录,或者将文件夹用LVM命令挂载在不同磁盘。Eg:/dev1 /dev2 /dev3  3个文件系统目录挂载在不同的磁盘。

在不同磁盘建立表空间FIT_PART_03、FIT_PART_09、FIT_PART_12。

create tablespace FIT_PART_03

logging

datafile '/dev1/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf'

size 2G

autoextend on

next 1G maxsize unlimited

extent management local;
create tablespace FIT_PART_09

logging

datafile '/dev2/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf'

size 2G

autoextend on

next 1G maxsize unlimited

extent management local;
create tablespace FIT_PART_12

logging

datafile '/dev3/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf'

size 2G

autoextend on

next 1G maxsize unlimited

extent management local;

三、alter table xxx modifyoracle12.2+版本

1、间隔分区(同一个表空间)

如下为间隔分区2023-05-01之前的数据作为一个分区,之后的数据每隔一个月自动分区。Local关键字表明索引和表的分区在同一空间。

ALTER TABLE JTG.FACTORY_CHECK_TASK MODIFY

  PARTITION BY RANGE (create_time)

 interval (numtoyminterval(1, 'MONTH'))

  (

PARTITION FCTI_PART_01 VALUES LESS THAN (TO_DATE('2023-05-01','yyyy-mm-dd')) tablespace USERS

   ) ONLINE

  UPDATE INDEXES

 (

 JTG.FCTI1 LOCAL,

 JTG.FCTI2 LOCAL,

 JTG.FCTI3 LOCAL,

 JTG.FCTI4 LOCAL

);

2、间隔分区(同一表在不同表空间)

store表分区指定表空间,可以将一张表分区在不同的磁盘中。每隔一个月的数据,自动创建分区,并轮流分配到三个表空间。

ALTER TABLE JTG.FACTORY_CHECK_TASK_ITEM MODIFY

  PARTITION BY RANGE (create_time)

 interval (numtoyminterval(1, 'MONTH'))

  (

PARTITION FCTI_PART_01 VALUES LESS THAN (TO_DATE('2023-05-01','yyyy-mm-dd'))

Store in ( FIT_PART_03, FIT_PART_09,  FIT_PART_12)   ) ONLINE

  UPDATE INDEXES;

3、范围分区(一张表在不同表空间)

表分区指定表空间,可以将一张表分区在不同的磁盘中。

如下'2023-10-01之前的数据在FIT_PART_09表空间,2023-10-01~2024-01-01的数据在FIT_PART_12表空间,2024-01-01~2024-04-01的数据在FIT_PART_12表空间, 之后的数据在USERS表空间。

ALTER TABLE JTG.factory_Check_task MODIFY

  PARTITION BY RANGE (create_time)

(

partition FIT_PART_23_09 values less than (to_date('2023-10-01', 'yyyy-mm-dd')) tablespace FIT_PART_09,

 partition FIT_PART_23_12 values less than (to_date('2024-01-01', 'yyyy-mm-dd')) tablespace FIT_PART_12,

 partition FIT_PART_24_03 values less than (to_date('2024-04-01', 'yyyy-mm-dd')) tablespace FIT_PART_03,

 partition FIT_PART_DEFAULT values less than (maxvalue) tablespace USERS

 ONLINE

  UPDATE INDEXES

 (

 JTG.FIT1 LOCAL,

 JTG.FIT2 LOCAL,

 JTG.FIT3 LOCAL

);

四、DBMS_REDEFINITION在线重定义方法

 SET TIMING ON
 begin

 dbms_redefinition.can_redef_table('JTG','FACTORY_CHECK_PLAN',1);--重定义前检查*

end;

-- 查询分区

select partition_name from user_tab_partitions where table_name='FACTORY_CHECK_PLAN';

--  表置换

 create table mem_ext for exchange with table members;

-- 允许行移动

enable row movement

--建立临时分区表

create table FACTORY_CHECK_PLAN_NEW

(

  id              NUMBER(15) not null,



// 和原来的表结构一样

)  PARTITION BY RANGE (create_time)

 interval (numtoyminterval(1, 'MONTH'))

 (

PARTITION FCTI_PART_01 VALUES LESS THAN (TO_DATE('2023-05-01','yyyy-mm-dd'))

Store in ( FIT_PART_03, FIT_PART_09,  FIT_PART_12)   )

  UPDATE INDEXES;

--  迁移数据

 exec DBMS_REDEFINITION.start_redef_table('HSADM', 'FACTORY_CHECK_PLAN', 'FACTORY_CHECK_PLAN_NEW');

 --结束

begin

    dbms_redefinition.finish_redef_table('HSADM', 'FACTORY_CHECK_PLAN', 'FACTORY_CHECK_PLAN_NEW');

  end;

五、验证

-- 验证

select partition_name from user_tab_partitions where table_name = 'FACTORY_INSPECTION_TASK';
select a.segment_name,a.tablespace_name,b.table_name,a.bytes/1024/1024  "大小(M)",a.blocks

from user_segments a, user_indexes b

where a.segment_name = b.index_name

and a.segment_type = 'INDEX' --索引d

-- and a.tablespace_name='APPINDEX' --表空间

and b.table_name = 'FACTORY_CHECK_TASK_ITEM' --索引所在表

order by table_name,a.bytes/1024/1024 desc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring扩展点系列-InitializingBean

文章目录 简介应用场景代码示例运行示例 简介 这篇文章主要介绍了Spring中InitializingBean的使用详细解析,InitializingBean是Spring提供的拓展性接口,提供了属性初始化后的处理方法,它只有一个afterPropertiesSet方法,凡是继承该接口的类&…

8G 显存玩转书生大模型

1. 启动demo 输出300字小故事 2. Streamlit Web Demo 部署InternLM2-Chat-1.8B 模型 安装依赖 让他输出helloworld

java基础 之 接口

文章目录 前言接口浅浅理解下接口抽象类与接口的爱恨情仇特点接口的回调 抽象类和接口相同之处区别 前言 前文回顾 戳这里→java基础 之 抽象类 因为接口是对抽象类的一种延伸,所以请先了解一下抽象类会更好的理解接口哦 子类对抽象类叫继承,使用关键字e…

Python 从入门到实战3(列表的简单操作)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们通过python小栗子来学习python基础知识语法&#xff…

怎样还原空白试卷?2024快速空白试卷还原软件合集

怎样还原空白试卷?2024快速空白试卷还原软件合集 在教育和考试过程中,有时需要将已经填写过的试卷还原为空白状态,以便重新使用或进行复印。通过使用特定的软件,你可以轻松地去除试卷上的手写内容或标记,恢复试卷的空…

【网络安全 | 虚拟机】VMware Workstation Pro下载安装使用教程(免费版)

未经许可,不得转载。 文章目录 下载安装使用(Centos)下载 进入官网页面,注册账户: https://profile.broadcom.com/web/registration注册后登录(用户名为邮箱),选择My Downloads: 如图选择: 如图选择: 如图选择: 如图选择:

嵌入式Linux C应用编程指南-进程、线程(速记版)

第九章 进程 9.1 进程与程序 9.1.1 main()函数由谁调用? C 语言程序总是从 main 函数开始执行,main()函数的原型是: int main(void) 或 int main(int argc, char *argv[])。 操作系统下的应用程序在运行 main()函数之前需要先执行一段引导代…

性能炸裂的数据可视化分析工具:DataEase!【送源码】

今天分享一款开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便地与他人分享。 技术栈 前端:Vue.js、Elemen…

【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

文章目录 1. 前言2. IP 转换过程3. NAPT① 基本概念② 工作原理③ 优缺点④ 实际应用 4. 缺陷5. NAT 穿越① 概述② 示例 6. NAT 与 代理服务器① 代理服务器与NAT的区别:② 正向代理 / 反向代理 服务器 1. 前言 NAT(网络地址转换)是一种常见…

路由策略工具

1.产生背景 a.保证数据访问的安全性 b.提高链路带宽利用率 c.流量路径不优 2.解决方案: 解决方案一:路由策略:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性 解决方案二:流量过滤:可使用Traffic-Filter工具对数据直接进行过滤 3.路由策略工具 a.可利…

登录究竟有多少种花样?

写在最前面: 大家好,我是小....小白不黑,现在的app以及任何一个系统,都离不开登录。其中最常见的估计就是密码登录,二维码登录,第三方账号登录以及单点登录了。 现在,让我们来捋一捋&#xff…

【virtuoso】INV 原理图+前仿真 + 版图 + 后仿真

采用SMIC工艺,不同工艺版图窗口可能有差异 1. 原理图&前仿真 1.1 绘制原理图 PMOS: NMOS宽长比2:1 PMOS开启导通电阻大一点,这样设置,可以使得阈值电压是VDD/2 按 i,可以插入器件按p,可以放置端口 1.2…

AXIS接口教程

免责声明: 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济…

Unity3D安卓游戏第三方SDK接入

PS:持续更新... 什么是SDK? SDK(Software Development Kit,软件开发工具包)是一个用于构建应用程序的工具集,包含开发特定软件的必要工具、库、文档和示例代码。SDK通常由软件或硬件厂商提供,帮…

MySQL高阶练习题1- 寻找面试候选人

目录 题目 准备数据 分析数据 实现代码 总结 题目 返回 所有面试候选人 的姓名 name 和邮件 mail 。当用户满足以下两个要求中的 任意一条 ,其成为 面试候选人 : 该用户在 连续三场及更多 比赛中赢得 任意 奖牌。该用户在 三场及更多不同的 比赛中赢得 金牌&…

Linux——用户和权限

root用户(超级管理员) root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。 ****************** 使用普通用户在根目录下创建文件夹 切换到root用户后,继续尝试 普通用户的权限,一般在其HOME目录…

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题 问题描述:在服务器上,我配置了一个虚拟环境,明确指定使用 Python 3.8 版本。然而,当我激活该环境并检查 Python 版本时,意外地发现…

IO练习--随机点名

随机点名器1 需求: 有一个文件里面存储了班级同学的信息,每一个信息占一行。 格式为:张三-男-23 要求通过程序实现随机点名器。 运行效果: 第一次运行程序:随机同学姓名1(只显示名字) 第二次运行程序:随机同学姓名2(只显示名字) 第三次运行程序:随机同学姓名3(只显…

数学建模强化宝典(2)linprog

一、介绍 linprog 是 MATLAB 中用于解决线性规划问题的函数。线性规划是一种优化方法,它尝试在满足一组线性等式或不等式约束的条件下,找到一个线性目标函数的最大值或最小值。linprog 函数适用于求解形如以下问题的线性规划问题: minimizecT…

Native开发与逆向第六篇 -字符串加密与hook

开发demo 写一个简单的字符串加密处理&#xff0c;将字符串字符转成ASCII十六进制值 std::string StrToHex(std::string str){unsigned char c;char buf[3];std::string result "";std::stringstream ss;ss << str;while (ss.read((char *)(&c), sizeof…