分区表 区间分区 散列分区 列表分区

简介: oracle 11g 增加了新的分区类型,总结一下目前之前的分区表 区间分区 散列分区 列表分区 区间分区: create table gh_range_example( id varchar2(100), range_date date not n...


oracle 11g 增加了新的分区类型,总结一下目前之前的分区表


区间分区


散列分区


列表分区


区间分区:


create table gh_range_example(
id varchar2(100),
range_date date not null)
partition by range(range_date)
(
partition range_15 values less than (to_date('2016-01-01','yyyy-mm-dd')),
partition range_16 values less than (to_date('2017-01-01','yyyy-mm-dd'))
);




SQL> select * from user_tab_partitions t where t.table_name='GH_RANGE_EXAMPLE';
TABLE_NAME                     COMPOSITE PARTITION_NAME                 SUBPARTITION_COUNT HIGH_VALUE                                                                       HIGH_VALUE_LENGTH PARTITION_POSITION TABLESPACE_NAME                  PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENT MAX_EXTENT   MAX_SIZE PCT_INCREASE  FREELISTS FREELIST_GROUPS LOGGING COMPRESSION COMPRESS_FOR   NUM_ROWS     BLOCKS EMPTY_BLOCKS  AVG_SPACE  CHAIN_CNT AVG_ROW_LEN SAMPLE_SIZE LAST_ANALYZED BUFFER_POOL FLASH_CACHE CELL_FLASH_CACHE GLOBAL_STATS USER_STATS IS_NESTED PARENT_TABLE_PARTITION         INTERVAL SEGMENT_CREATED
------------------------------ --------- ------------------------------ ------------------ -------------------------------------------------------------------------------- ----------------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- -------------- ----------- ---------- ---------- ---------- ------------ ---------- --------------- ------- ----------- ------------ ---------- ---------- ------------ ---------- ---------- ----------- ----------- ------------- ----------- ----------- ---------------- ------------ ---------- --------- ------------------------------ -------- ---------------
GH_RANGE_EXAMPLE               NO        RANGE_15                                        0 TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                83                  1 TS_ZYK_DATA                            10                     1        255                                                                                                     YES     DISABLED                                                                                                                DEFAULT     DEFAULT     DEFAULT          NO           NO         NO                                       NO       NO
GH_RANGE_EXAMPLE               NO        RANGE_16                                        0 TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                83                  2 TS_ZYK_DATA                            10                     1        255                                                                                                     YES     DISABLED                                                                                                                DEFAULT     DEFAULT     DEFAULT          NO           NO         NO                                       NO       NO






SQL> 
SQL> insert into gh_range_example(id,range_date) values(100,sysdate-365);
1 row inserted
SQL> insert into gh_range_example(id,range_date) values(100,sysdate);
1 row inserted
SQL> commit;
Commit complete


SQL> select * from gh_range_example partition(range_15);
ID                                                                               RANGE_DATE
-------------------------------------------------------------------------------- -----------
100                                                                              2015/6/16 1


SQL> insert into gh_range_example(id,range_date) values(100,sysdate+365);
insert into gh_range_example(id,range_date) values(100,sysdate+365)
ORA-14400: inserted partition key does not map to any partition


将其他日期都归属与第三个分区MAXVALUE


SQL> alter table gh_range_example add partition RANGE_MAX VALUES LESS THAN (MAXVALUE);
Table altered


MAXVALUE对于DATE,NUMBER,VARCHAR都是可以的


散列分区


hash partitioning


oracle建议分区个数为2的N次方




SQL> 
SQL> create table gh_hash_example(
    id varchar2(100),
    hash_date date)
   partition by hash(hash_date)
    (partition hash_1 tablespace ts_zyk_data,
     partition hash_2 tablespace ts_zyk_data);
Table created


SQL> select * from user_tab_partitions t where t.table_name='GH_HASH_EXAMPLE';
TABLE_NAME                     COMPOSITE PARTITION_NAME                 SUBPARTITION_COUNT HIGH_VALUE                                                                       HIGH_VALUE_LENGTH PARTITION_POSITION TABLESPACE_NAME                  PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENT MAX_EXTENT   MAX_SIZE PCT_INCREASE  FREELISTS FREELIST_GROUPS LOGGING COMPRESSION COMPRESS_FOR   NUM_ROWS     BLOCKS EMPTY_BLOCKS  AVG_SPACE  CHAIN_CNT AVG_ROW_LEN SAMPLE_SIZE LAST_ANALYZED BUFFER_POOL FLASH_CACHE CELL_FLASH_CACHE GLOBAL_STATS USER_STATS IS_NESTED PARENT_TABLE_PARTITION         INTERVAL SEGMENT_CREATED
------------------------------ --------- ------------------------------ ------------------ -------------------------------------------------------------------------------- ----------------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- -------------- ----------- ---------- ---------- ---------- ------------ ---------- --------------- ------- ----------- ------------ ---------- ---------- ------------ ---------- ---------- ----------- ----------- ------------- ----------- ----------- ---------------- ------------ ---------- --------- ------------------------------ -------- ---------------
GH_HASH_EXAMPLE                NO        HASH_1                                          0                                                                                                  0                  1 TS_ZYK_DATA                            10                     1        255                                                                                                     YES     DISABLED                                                                                                                DEFAULT     DEFAULT     DEFAULT          NO           NO         NO                                       NO       NO
GH_HASH_EXAMPLE                NO        HASH_2                                          0                                                                                                  0                  2 TS_ZYK_DATA                            10                     1        255                                                                                                     YES     DISABLED                                                                                                                DEFAULT     DEFAULT     DEFAULT          NO           NO         NO                                       NO       NO






DECLARE


BEGIN


FOR L IN 1..365 LOOP


INSERT INTO GH_HASH_EXAMPLE(ID,HASH_DATE)
VALUES(100,SYSDATE-L);


END LOOP;
COMMIT;
END;




SQL> SELECT COUNT(1) FROM gh_hash_example partition(hash_1);
  COUNT(1)
----------
       184


SQL> SELECT COUNT(1) FROM gh_hash_example partition(hash_2);
  COUNT(1)
----------
       181


hash_date有足够多的相异值,数据更容易在多个分区上均匀的分布


样本值差异性越多,越有利于散列分区的使用


散列分区不能明确某一行具体存在那个分区中


SQL> truncate table GH_HASH_EXAMPLE;
Table truncated


DECLARE


BEGIN


FOR L IN 1..365 LOOP


INSERT INTO GH_HASH_EXAMPLE(ID,HASH_DATE)
VALUES(100,SYSDATE-L);


END LOOP;
COMMIT;
END;








SQL>  SELECT COUNT(1) FROM gh_hash_example partition(hash_1);
  COUNT(1)
----------
       175


SQL>  SELECT COUNT(1) FROM gh_hash_example partition(hash_2);
  COUNT(1)
----------
       190




增加新的分区导致所有数据重写


SQL> ALTER TABLE gh_hash_example ADD PARTITION HASH_3 tablespace ts_zyk_data;
Table altered
SQL> ALTER TABLE gh_hash_example ADD PARTITION HASH_4 tablespace ts_zyk_data;
Table altered


SQL>  SELECT COUNT(1) FROM gh_hash_example partition(hash_1);
  COUNT(1)
----------
        94


SQL>  SELECT COUNT(1) FROM gh_hash_example partition(hash_2);
  COUNT(1)
----------
        97


SQL> SELECT COUNT(1) FROM gh_hash_example partition(hash_3);
  COUNT(1)
----------
        81


SQL> SELECT COUNT(1) FROM gh_hash_example partition(hash_4);
  COUNT(1)
----------
        93




列表分区


create table gh_list_example(
id varchar2(100),
created_d date)
partition by list(id)
(
partition list_01 values('A','B','C','E'),
partition list_02 values('D','F','G','I')
);


insert into gh_list_example(id,created_d) values('A',sysdate);
insert into gh_list_example(id,created_d) values('D',sysdate);
COMMIT;






SQL> INSERT INTO GH_LIST_EXAMPLE(ID,CREATED_D) VALUES('W',SYSDATE);
INSERT INTO GH_LIST_EXAMPLE(ID,CREATED_D) VALUES('W',SYSDATE)
ORA-14400: inserted partition key does not map to any partition






SQL> ALTER TABLE GH_LIST_EXAMPLE ADD PARTITION LIST_03 VALUES( DEFAULT);
Table altered


SQL> INSERT INTO GH_LIST_EXAMPLE(ID,CREATED_D) VALUES('W',SYSDATE);
1 row inserted


SQL> COMMIT;
Commit complete




ALTER TABLE GH_LIST_EXAMPLE ADD PARTITION LIST_04 VALUES('H')
ORA-14323: cannot add partition when DEFAULT partition exists
img_e25d4fb2f8de1caf41a735ec53088516.pngFQB.sql
目录
相关文章
|
安全 开发工具 数据安全/隐私保护
图形验证码,守护你的账号安全!
图形验证码能够有效防止恶意攻击,例如暴力破解、垃圾邮件发送和账号滥用行为。图形验证码提供了一个简单而高效的方式来守护你的账号安全。
|
10月前
银河麒麟申威系统安装nfs-utils-2.4.3-1.ky10.sw_64.rpm详细步骤(含依赖解决和NFS服务启动)
本文介绍在银河麒麟系统上安装NFS服务的完整步骤:先检查并卸载旧版本,再通过rpm命令安装指定版本的nfs-utils包,最后验证安装结果并可选启动NFS服务,确保共享功能正常使用。
1095 3
|
7月前
|
存储 人工智能 算法
深度拆解:一套最小可用的向量数据库是如何从代码堆里长出来的?
本文带你从零手搭向量数据库,深入拆解Embedding、向量压缩与ANN三大核心原理,避开“调包侠”陷阱;通过FAISS实战构建语义检索系统,涵盖向量化、索引、精排、元数据过滤全流程,并提供可落地的评估方法与工程避坑指南。(239字)
265 2
|
算法 安全 量子技术
“RSA还能撑多久?”——聊聊量子计算下密码学的危与机
“RSA还能撑多久?”——聊聊量子计算下密码学的危与机
775 0
|
运维 安全 BI
【运维有小邓】如何进行AD域文件权限管理?
在网络资源管理中,谁可访问资源及访问级别至关重要。Active Directory环境下,管理文件服务器权限耗时且繁琐。ADManager Plus提供批量管理用户NTFS和共享权限的功能,简化权限分配、修改与撤销流程,提升管理效率,确保资源安全。通过集中式界面,管理员能快速准确地控制资源访问,优化环境管理。
585 1
【运维有小邓】如何进行AD域文件权限管理?
|
Linux 对象存储 Windows
MinIO 客户端安装与使用教程
详细讲解MinIO CLI的安装与使用
6290 0
|
Shell Windows
Mac使用IntelliJ IDEA报错“Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA”
Mac使用IntelliJ IDEA报错“Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA”
Mac使用IntelliJ IDEA报错“Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA”
|
搜索推荐
【推荐几款实用的网盘资源搜索引擎】
云盘资源,浩如烟海,但缺乏搜索工具,让无数网友苦不堪言。幸运的是,现在有了强大的网盘搜索引擎,一切问题迎刃而解。轻松找到您需要的文件,快速下载,节省时间。享受便捷的云盘体验,释放您的创造力。无论是工作文档还是娱乐资源,网盘搜索引擎助您轻松搞定。解放您的搜索困扰,开启全新的云盘世界!
17980 123
|
Linux 调度 KVM
KVM详解(一)——KVM基础知识
KVM详解(一)——KVM基础知识
1382 0