首页 > 数据库 >49.Oracle的分区

49.Oracle的分区

时间:2023-01-02 17:56:26浏览次数:54  
标签:49 分区 限值 date range values Oracle

Oracle的分区

  Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。对表中数据的查询、表的备份的时间将大大提高,以及遇到特定情况下,要对表中数据进行恢复,也随之数据量的增大而花费更多的时间。这个时候,Oracle数据库提供了分区这个机制,通过把一个表中的行进行划分,归为几部分。可以减少大数据量表的管理和性能问题。利用这种分区方式把表数据进行划分的机制称为表分区,各个分区称为分区表。

Oracle的分区的作用

  Oracle分区对于大型表(大数据量)非常有用

  • 改善大型表的查询性能,因为可以通过查询对应分区表中对应的数据,而不需要查询整个表
  • 表更容易管理,因为分区表的数据存储在各个分区中,所以可以按照分区建,来管理对应分区当中的数据,可以按照分区加载和删除其中的数据,比如在不分区情况下,更容易管理数据。以及在特定的事故情况下,通过备份好的分区,可以快速恢复对应分区当中的数据,也不需要对全表数据进行恢复
  • 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能 

Oracle分区方法

  • 范围分区:范围分区就是对表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储到那个分区上,如根据日期进行分区
  • Hash分区:散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
  • List分区:当你需要明确地控制如何将行映射到分区时,就使用列表分区方法,与范围分区和散列分区所不同的是,列表分区不支持多列分区,如果要将表按列分区,那么分区键就只能由表的一个单独的列组成,然而可以用范围分区或散列分区方法进行分区的所有的列,都可以用列表分区方法进行分区。
  • 组合分区

1.范围分区

  范围分区就数据基于指定的分区映射到每一个分区中,这种分区方式最为常用,且常常采用日期作为分区键

  注意:

  • 每一个分区都需要有一个values less than子句,它指定了该分区的上限值(即该分区能接受的分区键的最大值)。记录里分区键的值小于这个上限值时,该记录会被放入该分区,而当记录里分区键的值等于或大于这个上限值时该记录会被放入下一个上限值更高的分区中。
  • 所有的分区里,除了第一个分区,其他分区其实都有一个隐式的下限值(即该分区能接受的分区键的最小值),这个下限值就是上一个分区的上限值
  • 在最后一个分区中,可定义上限值为maxvalue(该值可理解为所有分区中的一个最大上限值,包括空值),当记录分区键的值大于之前所有分区的上限值时,这条记录会被放入这最后一个分区中。

  示例:  

-- 创建实例表
create table range_example
(
    id        number(2),
    done_date date,
    data      varchar2(50)
)

-- 创建分区,分区键为示例表(range_example)中的done_date字段
partition by range(done_date)
(
    partition part_1 values less than(to_date('20220101','yyyymmdd')),
    partition part_2 values less than(to_date('20220201','yyyymmdd')),
    partition part_3 values less than(maxvalue)
)

  查看分区表中的信息:

 select * from USER_TAB_PARTITIONS where TABLE_NAME='RANGE_EXAMPLE';

 

insert into range_example values(1,to_date('2022-09-28','yyyy-mm-dd'),'union');
insert into range_example values(2,to_date('2022-01-28','yyyy-mm-dd'),'l3');
insert into range_example values(3,to_date('2022-02-28','yyyy-mm-dd'),'z4');

参考:https://zhuanlan.zhihu.com/p/401808404       

标签:49,分区,限值,date,range,values,Oracle
From: https://www.cnblogs.com/zmc60/p/17020282.html

相关文章

  • SQL注入之Oracle,mongoDB等注入
    常见数据库:access、mysql、mssql、MongoDB、postgresql、sqlite、oracle、sybase等Access是没有库之分,比其他数据库低一个等级。目前在市面上的access已经很少了,和asp语言......
  • 磁盘分区
    1.磁盘分区fdisk/dev/sda2Welcometofdisk(util-linux2.23.2).Changeswillremaininmemoryonly,untilyoudecidetowritethem.Becarefulbeforeusingthe......
  • mysql数据库的分区与分表(概念性说明)
    为什么要分区或者分表分区、分表都是解决数据量大,查询数据慢的主要手段。正常情况下一个innodb表,在没有分区分表情况下。在数据库文件数据中,它是有一个存储表结构的.frm文件......
  • 3.深入理解Oracle中的latch
    1.串行化概述串行化-数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据库,多个用户同时在相同的物理位置上写数据时,不能发生......
  • 【kafka源码】ReassignPartitionsCommand分区副本重分配源码原理分析(附配套教学视频)
    日常运维、问题排查​​滴滴开源LogiKM一站式Kafka监控与管控平台​​​​阿B:石臻臻的杂货铺​​文章目录​​1.脚本的使用​​​​2.源码解析​​​​2.1`--generate`......
  • day49-初始vue
    初始vuevue在htmlcssjs的基础上进行封装和实例化,更简单方便使用vue首先要引入vue<head><metacharset="UTF-8"><title>Title</title><!--引入vue......
  • Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net a
    Navicat连接Oracle报ORA-03135:connectionlostcontactORA-28547:connectiontoserverfailed,probableOracleNetadminerroroci.dll版本太低,需要重新下载并......
  • Oracle基础概念
    超级用户sysassysdbaconn切换用户次要用户system普通用户scott创建表空间请输入用户名:sysassysdba输入口令:root已连接。SQL>createtablespacean_......
  • Oracle数据类型
    一、Oracle的,默认字符集:ZHS16GBK(简体中文,16位,GBK),在此字符集中,一个字母或数字占一字节,一个汉字占两字节;select*fromnls_database_parameterswhereparameter='NLS_CHARA......
  • Oracle_3_复制表、插入选择、递归查询
    一、复制表1、selectinto,使用查询结果新建表结构:createtable表名(字段名1,字段名2,......)asselect语句2、insertintoselect,使用查询结果插入到表中结构:inse......