oracle大数据量查询--分区表入门

oracle大数据量分区后查询效率低下 场景描述:   oracle数据库中有2张表,一张是tm_bus_realtime_log当前表 只有当前一天的数据。数据量有几百万的数据。还有一张表,tm_bus_realtime_his历史表 进行了分区。每10天一分区,就是每个月有3个分区。整个历史表有几亿的数据量。每个分区有千万条数据。 问题描述:   在从历史表的分区中,查询数据时,很慢,由于数据量非常大,如果想查询几天的数据更慢 阅读详情
 在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十到几百GB,有的甚至可以到TB级。虽然存储介质和数据处理技术的发展也很快,但是仍然不能满足用户的需求,为了使用户的大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能。 使用分区的优点: 
  增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; 

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

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

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

Oracle数据库提供对表或索引的分区方法有三种: 

  范围分区 
  Hash分区(散列分区) 
  复合分区 

下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便,我们先建三个表空间。

---建三个表空间
create tablespace dinya_space01 
datafile 'D:\prg\oracle\product\10.2.0\oradata\orcl\dinya01.dnf' size 50M;

create tablespace dinya_space02 
datafile 'D:\prg\oracle\product\10.2.0\oradata\orcl\dinya02.dnf' size 50M;

create tablespace dinya_space03 
datafile 'D:\prg\oracle\product\10.2.0\oradata\orcl\dinya03.dnf' size 50M;



--1.1. 分区表的创建 
--1.1.1. 范围分区 
         --- 范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,
         ---决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等

---根据记录的序号分区建表
create table dinya_test(
       transaction_id number primary key,
       item_id number(8) not null,
       item_description varchar2(300),
       transaction_date date not null
)
partition by range(transaction_id)(
          partition part_01 values less than(30000000) tablespace dinya_space01,
          partition part_02 values less than(60000000) tablespace dinya_space02,
          partition part_03 values less than(maxvalue) tablespace dinya_space03
);
---根据日期分区建表
create table dinya_test(
       transaction_id number primary key,
       item_id number(8) not null,
       item_description varchar2(300),
       transaction_date date not null
)
partition by range(transaction_date)(
          partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dinya_space01,
          partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dinya_space02,
          partition part_03 values less than(maxvalue) tablespace dinya_space03
);
/*
    这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候,
系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中。
    当然,我们还可以根据需求,使用两个字段的范围分布来分区,
如partition by range ( transaction_id ,transaction_date), 
分区条件中的值也做相应的改变,请读者自行测试。
*/




--1.1.2. Hash分区(散列分区)
 /*
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,
因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中
 */
create table dinya_test(
       transaction_id number primary key,
       item_id number(8) not null,
       item_description varchar2(300),
       transaction_date date not null
)
partition by hash(transaction_id)(
          partition part_01 tablespace dinya_space01,
          partition part_02 tablespace dinya_space02,
          partition part_03 tablespace dinya_space03
);

--1.1.3. 复合分区 
/*
有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,
这样我们就要使用复合分区。复合分区是先使用范围分区,
然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,
然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:
*/


--下例中,先是根据交易日期进行范围分区,然后根据交易的ID将记录散列地存储在三个表空间中。
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) 
); 

--插入实验数据
insert into dinya_test values(1, 12, 'BOOKS',sysdate); 
insert into dinya_test values(2, 12, 'BOOKS',sysdate+30); 
insert into dinya_test values(3, 12, 'BOOKS',to_date('2005-05-30','yyyy-mm-dd')); 
insert into dinya_test values(4, 12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd')); 
insert into dinya_test values(5, 12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd')); 
insert into dinya_test values(6, 12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd')); 
commit; 


drop table dinya_test;


select * from dinya_test;                       --有(所有分区表中所有数据)
select * from dinya_test partition(part_01);    --有(分区表part_01的数据)
select * from dinya_test partition(part_02);    --无(分区表part_02的数据)
select * from dinya_test partition(part_03);    --无(分区表part_03的数据)


--在检索的数据量很大的时候,指定分区会大大提高检索速度

Oracle中普通表转换为分区表常用的方法 在 Oracle 几年的学习中, 做了很多的实验,也遇到了很多的问题, 在这个过程中,积累了一些学习文档。 因为太多,不便于查阅。 根据自己对 Oracle 的理解以及日常工作中遇到的情况并进行了一些整理,方便自己的查看。 这些文档中有很多内引用借鉴了前辈们的资料和 google 上的 一些信息。  在这里引用的内容也是完全出于学习,没有其他用途,如有侵犯到版权的问题,请联系我。 我将删除这些 阅读详情

相关推荐

千万级数据,如何做性能优化?分库分表、Oracle分区表?

通过分表分区技术,解决Oracle千万级数据性能问题

学Java,找哪吒 6065

spark的转换算子2

1)coalesce def coalesce(numPartitions: Int, shuffle: Boolean = false)(implicit ord: Ordering[T] = null): RDD[T] 该函数用于将RDD进行重分区,使用HashPartitioner。 第一个参数为重分区的数目,第二个为是否进行shuffle,默认为false; 作用 缩减分区数,用于大数据集过滤后,提高小数据集的执行效率。 val ListRDD: RDD[Int] = context.makeRDD

changshupx的博客 2093

Windows 11下ROS2 Humble与PyCharm无缝集成实战(避坑指南+完整配置流程)

本文详细介绍了在Windows 11系统下如何实现ROS2 Humble与PyCharm的无缝集成,包括环境准备、ROS2 Humble安装、PyCharm配置以及C++与Qt5混合开发的实战技巧。通过避坑指南和完整配置流程,帮助开发者高效搭建稳定的机器人开发环境,特别适合Windows平台的ROS2开发者。

weixin_28710999的博客 366

Oracle 分区表总结

Oracle 分区表总结 一. 分区表理论知识        Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。        Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中

醉爱梁静茹 9115

GOM引擎单机传奇架设全攻略——从DBC2000配置到登录器生成

本文详细解析了使用GOM引擎架设单机传奇的完整流程,从DBC2000的安装配置、服务端部署、引擎控制器设置,到登录器生成与客户端补丁放置。文章重点解决了单机架设中的常见问题,如数据库路径配置、IP地址设置及Key.lic文件处理,旨在帮助玩家快速搭建稳定的个人游戏环境,体验GM乐趣。

weixin_28318011的博客 627

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 866

准确计算oracle表分区记录数

1,先对表进行分析: analyze table [table] compute statistics; 2,然后查询表分区记录数 select t.partition_name,t.num_rows from all_tab_partitions t where table_name='table_name'

巫山云的专栏 4384

如何在win11中用双硬盘或移动硬盘装Ubuntu 20.04 双系统

win11 安装双系统

qq_42817360的博客 5137

Oracle分区查询sql

根据分区查询速度会快很多

weixin_42326851的博客 2万+

FPGA—ZYNQ_BD Block Design学习(一)

1.第一步:打开Vivado软件,创建或打开一个工程。2.第二步:在Block Design中添加arm核心,并将其配置为IP核。3.第三步:配置arm核心的外设信息,如DDR接口、时钟频率、UART接口等。4.第四步:完成Block Design中的模块互联,生成PL端的比特流。 5.第五步:导出PS端的硬件信息,包括arm IP核的外设、速度、引脚和地址等信息。1创建bd 需要有ddr以及uart和时钟配置外设io口,这里就是zynq的管脚规定好的,根据原理图用哪个个勾选哪一个。 对外设uart的配

m0_58129662的博客 1027

Nacos漏洞利用工具V3.0.5实战:从认证绕开到内存马植入的全流程指南

本文详细解析了Nacos漏洞利用工具V3.0.5在实战中的应用,从认证绕开到内存马植入的全流程。文章深入探讨了如何利用Nacos的历史漏洞,如默认口令、认证逻辑绕过、Derby SQL注入及Jraft反序列化,实现权限提升与持久化控制,并提供了防御视角与加固建议,旨在帮助安全人员理解攻击链以加强防护。

h6j7k8l9p0的博客 483

ORACLE建立按日期自动分区表

oracle 11g 支持自动分区,不过得在创建表时就设置好分区。 如果已经存在的表需要改分区表,就需要将当前表 rename后,再创建新表,然后复制数据到新表,然后删除旧表就可以了。 一、为什么要分区(Partition) 1、一般一张表超过2G的大小,ORACLE是推荐使用分区表的。 2、这张表主要是查询,而且可以按分区查询,只会修改当前最新分区的数据,对以前的不怎么做删除和修改。 3、数据量大时查询慢。 4、便于维护,可扩展:11g 中的分区表新特性:Partition(分区)一直是 Oracle 数

cai454692590的博客 9034

Qt之自定义QToolTip,去掉显示动画和隐藏延时

先来看看Qt原生QToolTip的缺点:1.当提示内容无变化时,弹窗无法移动。只能先传个空字符串强制弹窗隐藏,然后在新位置再传个字符串。2.默认显示10多秒才消失,当然这个时间是可以设置的,但是如果我想一直显示呢?总不能设置一个超级大的时间吧。3.鼠标移出控件后(调用QToolTip::showText时传入了控件指针)默认300毫秒弹窗才隐藏。而且这个时间没法设置,如果想立即隐藏就没办法了。

草上爬的博客 4268

oracle 分区表创建总结(利用已经存在的表快速创建分区)

一、为什么要分区(Partition)   1、一般一张表超过2G的大小,ORACLE是推荐使用分区表的。   2、这张表主要是查询,而且可以按分区查询,只会修改当前最新分区的数据,对以前的不怎么做删除和修改。   3、数据量大时查询慢。   4、便于维护,可扩展:11g 中的分区表新特性:Partition(分区)一直是 Oracle 数据库引以为傲的一项技术,正是分区的存在让 Oracle 高...

weixin_42403127的博客 8629

【ComfyUI】Flux + ControlNet 边缘搭配深度、瓷砖、姿态引导图生图

本文介绍了一个基于 Wan 2.1 的 ComfyUI 文生视频工作流,通过 UNet、CLIP 和 VAE 三个核心模型,将文本提示转化为动态视频。工作流包含模型加载、提示词解析、潜空间采样等7个环节,支持分辨率、帧数等参数设置,最终输出高质量视频文件。该方案适用于创意设计、教育培训和多媒体制作等场景,能快速生成符合语义的动态内容。文章还提供了相关开发资源和学习链接,适合AI视频生成领域的研究者和实践者参考。

Mr数据杨 1632

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Oracle 分区表和普通表查询效率分析对比

Oracle 分区表和普通表查询效率分析对比 目录 Oracle 分区表和普通表查询效率分析对比 目录 测试环境 创建普通的表使用toad的generate data生成一千万条记录 创建表并以哈希方式分区 创建分区表的同时导入海量数据 小插曲-表空间扩容 分区表上先建立表结构并导入数据然后建立索引 测试结果 测试结论 测试环境 Oracle Da...

weixin_30421809的博客 1796

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

oracle 分区表介绍

分区表(Partitioned Table)是数据库中一种特殊的表结构,它通过将数据分割成多个分区来提高查询和管理性能。每个分区都包含数据的一个子集,分区表通常用于存储大量数据,通过分区使得操作数据更为高效。分区表的优点包括:提高查询性能:对于大数据量的表,通过查询特定分区的数据而非整个表来提高查询效率。提高管理效率:分区表可以将数据根据某些条件(如时间、范围、列表等)分区,使得数据的备份、恢复和删除等操作更为方便。提高并发性:分区表可以实现不同分区并行处理,提升数据库的并发能力。分区的类型。

小 tom的博客 2116

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Oracle - 分区表与分库分表,大数据量架构设计思路

本文探讨了Oracle分区表与分库分表在大数据量场景下的架构设计思路: 核心观点 Oracle分区表作为数据库原生能力,应优先考虑。它通过逻辑分区+物理隔离实现透明数据管理,支持范围/列表/哈希等多种分区策略,可显著提升查询性能(分区剪枝)、简化维护(在线分区操作)并优化备份恢复效率。 分区表优势 零应用侵入,强事务一致性 支持自动分区维护(如按月自动创建分区) 典型性能提升达67倍(实测案例) 分库分表适用场景 当单机容量/性能达到极限时采用,但会引入分布式事务、跨节点JOIN等新挑战。建议采用渐进式演进

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

oracle多大数据量适合建分区表,亿级数据量的分区表查询效率问题

表结构以及索引如下:create table test(ID INTEGER not null, --id是主键IS_DELETED NUMBER(1) not null,CREATOR VARCHAR2(255),MODIFIOR VARCHAR2(255),PLATENUMBER VARCH...

weixin_28898707的博客 1774

Oracle千万级以上数据量查询速度慢问题解决

Oracle千万级以上数据量查询速度慢问题解决,生产环境查询优化

起源的博客 2万+

Oracle大数据量查询实际分析

Oracle数据库: 刚做一张5000万条数据的数据抽取,当前表同时还在继续insert操作,每分钟几百条数据。 该表按照时间,以月份为单位做的表分区,没有任何索引,当前共有14个字段,平均每个字段30个字节。当前表分区从201101到201512每月一个分区 测试服务器:xeno 5650,32核cpu,win2003操作系统,物理内存16G;测试工具plsql 1.最开始的查询: s

superhoy的专栏 4801

何时用、如何建Oracle分区表?

一、什么场景、时间适合用分区表? 1、大数据量的表,比如大于2GB。一方面2GB文件对于32位OS是一个上限,另外备份时间长。 2、包括历史数据的表,比如最新的数据放入到最新的分区中。典型的例子:历史表,只有当前月份的数据可以被修改,而其他月份只能read-only         就我实际工作中了解到的几种情况: 全国法人单位名录库约有700-800万条记录,字段约有

软件设计师到程序员 1万+

【Oracle database】 Oracle数据库分区表基础

Oracle 分区表 range 范围分区 hash 哈希分区 list 分组hash 组合分区

一只懂代码不懂人情世故的源码爱好猿 4398

oracle添加分区语句_oracle 11g 分区表创建(自动按年、月、日分区)

前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性。oracle 11g 支持自动分区,不过得在创建表时就设置好分区。如果已经存在的表需要改分区表,就需要将当前表 rename后,再创建新表,然后复制数据到新表,然后删除旧表就可以了。一、为什么要分区(Partition)1、一般一张表超过2...

weixin_39714113的博客 1340

查询oracle分区表命令,oracle中分区常用命令1

摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十到几百GB,有的甚至可以到TB级。虽然存储介质和数据处理技术的发展也很快,但是仍然不能满足用户的需求,为了使用户的大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,以改善大型应用系统...

weixin_32054021的博客 411
上一篇: mysql 远程连接数据库的二种方法 .
下一篇: java IO操作,追加文件的三种方式
sofokiller
博客等级 码龄14年 10粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值