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

          本文介绍了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_03loggingdatafile '/dev1/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf'size 2Gautoextend onnext 1G maxsize unlimitedextent management local;
create tablespace FIT_PART_09loggingdatafile '/dev2/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf'size 2Gautoextend onnext 1G maxsize unlimitedextent management local;
create tablespace FIT_PART_12loggingdatafile '/dev3/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf'size 2Gautoextend onnext 1G maxsize unlimitedextent management local;

三、alter table xxx modifyoracle12.2+版本

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

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

ALTER TABLE JTG.FACTORY_CHECK_TASK MODIFYPARTITION 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) ONLINEUPDATE INDEXES(JTG.FCTI1 LOCAL,JTG.FCTI2 LOCAL,JTG.FCTI3 LOCAL,JTG.FCTI4 LOCAL);

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

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

ALTER TABLE JTG.FACTORY_CHECK_TASK_ITEM MODIFYPARTITION 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)   ) ONLINEUPDATE 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 MODIFYPARTITION 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 USERSONLINEUPDATE INDEXES(JTG.FIT1 LOCAL,JTG.FIT2 LOCAL,JTG.FIT3 LOCAL);

四、DBMS_REDEFINITION在线重定义方法

 SET TIMING ON
 begindbms_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');

 --结束

begindbms_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.blocksfrom user_segments a, user_indexes bwhere a.segment_name = b.index_nameand 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.rhkb.cn/news/413454.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计选题推荐-大学生竞赛管理系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【C++ 第十六章】哈希

1. unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好 的查询是,进行…

基于爬山法MPPT和PI的直驱式永磁同步风力发电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM 4.2 MPPT 4.3 PI 控制器原理 5.完整工程文件 1.课题概述 基于爬山法最大功率点跟踪 (Maximum Power Point Tracking, MPPT) 和比例积分控制器 (Proportional Integral, PI) 的直驱式永磁同步…

两个月冲刺软考——关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法(例题讲解,看完必会)

1. 数据库中的简单属性、多值属性、复合属性、派生属性 简单属性:指不能够再分解成更小部分的属性,通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。 多值属性:指一个属性可以有多个值。例如一个学生可能会有多个…

栈OJ题——有效的括号

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 有效的括号 题目描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。括号匹配。 二、…

异业联盟的巅峰之作!某店生活 两年百亿销售额!

大家好 我是一家软件开发公司的产品经理 吴军 最近有个爆火的商业模式 带动了三方消费 平台能赚到钱 消费者能省钱 商家也能获取到客源甚至还能赚钱 他究竟是怎么样做到三方都赚到钱的? 在当前经济形势下,许多消费者变得谨慎,减少了不必…

100天带你精通Python——第8天面向对象编程

文章目录 前言面向对象技术简介类(Class)对象(Object)继承(Inheritance)封装(Encapsulation)多态(Polymorphism)Python类详解静态变量(Static Var…

day39(8/29)——harbor私有仓库管理

一、harbor私有仓库管理 是python的包管理工具,和yum对redhat的关系是一样的 yum -y install epel-release yum -y install python2-pip pip install --upgrade pip pip list pip 8x pip install --upgrade pip pip install --upgrade pip20.3 -i https://mirror…

应用层(Web与HTTP)

目录 常见术语 1.HTTP概况 2.HTTP连接 非持久HTTP流程 响应时间模型 持久HTTP 3.HTTP报文 3.1HTTP请求报文 3.2HTTP响应报文 HTTP响应状态码 4.Cookies(用户-服务器状态) cookies:维护状态 Cookies的作用 5.Web缓冲(…

yolo格式数据集|自动驾驶|5类别|数据集已划分好|可以直接使用|yolov5|v6|v7|v8|v9|v10通用

本数据为自动驾驶检测数据集,数据集是车类摄像头在不同场景下拍摄,有5类,分别为car、truck、person、bicycle、traffic_light。数据集整理不易,获取地址在最后。 数据集数量如下: 总共有:18000张 训练集:14…

【卷起来】VUE3.0教程-01-环境搭建与安装

​分享不易,耗时耗力,麻烦给个不要钱的关注和赞吧 🌲 什么是VUE Vue 是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。但 Web 世界是十分多样化的,不同的开发者在 Web 上构建的东西可能在形式和规模…

算法-最长连续序列

leetcode的题目链接 这道题的思路主要是要求在O(n)的时间复杂度下,所以你暴力解决肯定不行,暴力至少两层for循环,所以要在O(n)的时间复杂度下,你可以使用HashSet来存储数组,对于每个数字&#…

给鼠标一个好看的指针特效 鼠标光标如何修改形状?

许多爱美的小伙伴们都想着如何给自己的电脑打扮一下,用各种各样的途径来美化我们的电脑。今天我们给大家分享一下,如何美化鼠标效果,给鼠标指针修改成一个非常好看的形状~ 一起来看几组鼠标的效果,小编我给大家做了个录屏&#x…

YoloV8实战:使用YoloV8实现OBB框检测

定向边框(OBB)数据集概述 使用定向边界框(OBB)训练精确的物体检测模型需要一个全面的数据集。本文解释了与Ultralytics YOLO 模型兼容的各种 OBB 数据集格式,深入介绍了这些格式的结构、应用和格式转换方法。数据集使用DOTA。 YOLO支持的 OBB 格式 在Ultralytics YOLO …

AI编码新时代:免费人工智能助手Blackbox AI

前言: 在当今快速发展的科技时代,人工智能已经渗透到我们生活的方方面面,从智能手机的语音助手到智能家居控制系统,再到在线客服和个性化推荐算法,AI智能工具正变得越来越普遍。它们以其高效、智能和用户友好的特性&am…

git常见命令行及分支规范

文章目录 GIT常见命令行原理图基本设置初始化和克隆仓库文件管理提交更改查看状态和历史分支管理远程仓库交互高级功能GIT常见分支风格1. 单一主干分支(Single Main Branch)//极少使用优点:缺点:2. 多主干分支(Multiple Main Branches)//个人小型项目采用优点:缺点:3. …

redis的共享session应用

项目背景: 该项目背景就是黑马的黑马点评项目。 一:基于Session实现验证码登录流程 基本的登录流程我们做了很多了。这个是短信登录流程 其实和普通的登录流程就多了一个生成验证码,并将验证码保存在session中,并且呢&#xf…

《JavaEE进阶》----1.<JavaEE进阶可以学到什么>

本篇博客会讲到 一、JavaEE进阶学习内容: 1.框架的学习:Spring、Spring Boot、Spring MVC、MyBatis 2.大项目实践 3.源码阅读 二、JavaEE简介 B/S架构web开发流程 web前端开发(了解) web后端开发(重点) 三、…

【C++】OJ习题 篇2

🚀个人主页:奋斗的小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 💥1、删除有序数组中的重复项💥2、数组中出现次数超过一半的数字💥3、最…

【Python进阶】学习Python必须要安装PyCharm。一篇文章带你总结一下安装PyCharm的注意事项,文末附带PyCharm激活码!!!

PyCharm激活码(文末附带精品籽料): K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdG…